Lors du mappage d'un servlet de contrôleur frontal global sur /*, il devient difficile d'accéder à des ressources statiques telles que CSS, JS et images généralement stockés dans un dossier séparé. Cet article explore une solution pour restaurer l'accès à ces fichiers statiques tout en conservant la fonctionnalité globale du contrôleur frontal.
L'approche recommandée comporte deux étapes :
Au lieu d'utiliser / comme modèle d'URL pour le servlet du contrôleur, mappez-le sur un chemin plus spécifique, tel que /pages/. Cela permettra d'exclure les ressources statiques de la portée du contrôleur.
Créez un filtre qui écoute sur /*. Ce filtre continuera de manière transparente la chaîne pour toute requête vers des ressources statiques et distribuera les requêtes au servlet du contrôleur pour d'autres contenus.
Dans la méthode doFilter() du filtre, utilisez le code suivant :
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); }
Ce code vérifie si le chemin de la requête commence par "/static" (ou tout autre préfixe attribué aux ressources statiques). Si c'est vrai, la demande est transmise au servlet par défaut qui correspond généralement au dossier de ressources statiques. Sinon, la requête est envoyée au servlet du contrôleur (en supposant qu'elle soit mappée sur */pages).
Cette solution garantit que les ressources statiques sont exclues du mappage du servlet du contrôleur, tout en permettant aux autres requêtes d'être traitées par le contrôleur comme prévu. C'est un moyen pratique d'équilibrer le besoin d'un contrôleur frontal global avec l'accessibilité des ressources statiques.
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!