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
Libérer: 2024-12-04 02:50:10
original
707 Les gens l'ont consulté

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>
Copier après la connexion

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() {
    }
}
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal