Maison >Java >javaDidacticiel >Comment accéder aux ressources statiques avec un servlet Global Front Controller mappé sur /* ?

Comment accéder aux ressources statiques avec un servlet Global Front Controller mappé sur /* ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-04 02:50:10271parcourir

How to Access Static Resources with a Global Front Controller Servlet Mapped to /*?

Accès aux ressources statiques lors du mappage d'un servlet de contrôleur frontal global sur /*

Le mappage d'un servlet de contrôleur frontal global sur /* peut empêcher l'accès à ressources statiques telles que CSS, JS et images. Pour résoudre ce problème, envisagez les étapes suivantes :

Mappez le servlet du contrôleur sur un modèle d'URL plus spécifique

Au lieu de mapper le servlet sur /, utilisez un modèle plus spécifique comme /pages/. Cela permet de stocker le contenu statique dans un dossier séparé, tel que /static.

Créer un filtre pour gérer le contenu statique

Créer un filtre qui écoute sur /* et gère de manière transparente les demandes de contenu statique en les transmettant au servlet par défaut. Pour toute autre demande, le filtre doit être envoyé au servlet du contrôleur.

Voici un exemple de configuration de filtre :

<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.example.Filter</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Implémentation du filtre :

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;

public class Filter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest req = (HttpServletRequest) request;
        String path = req.getRequestURI().substring(req.getContextPath().length());

        if (path.startsWith("/static")) {
            chain.doFilter(request, response); // Goes to default servlet.
        } else {
            request.getRequestDispatcher("/pages" + path).forward(request, response);
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }
}

Servlet de contrôleur Mappage :

<servlet>
    <servlet-name>controller</servlet-name>
    <servlet-class>com.example.Controller</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>controller</servlet-name>
    <url-pattern>/pages/*</url-pattern>
</servlet-mapping>

Cette approche permet de servir le contenu statique de manière transparente tout en dirigeant d'autres requêtes vers le servlet du contrôleur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn