Les exemples de cet article résument les méthodes courantes de traitement des fichiers statiques dans Javaweb, qui sont d'une grande valeur pratique dans le développement de programmes Javaweb. Les méthodes spécifiques sont résumées comme suit :
Méthode 1 : activer le defaultServlet de Tomcat pour traiter les fichiers statiques
Ajoutez web.xml :
<servlet-mapping> <servlet-name>par défaut</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>par défaut</ nom-servlet> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>par défaut</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
Remarque : il doit être écrit devant DispatcherServlet et laisser defaultServlet intercepter la requête en premier, afin que la requête n'entre pas dans Spring. Je pense que les performances sont les meilleures.
Le nom du servlet par défaut fourni avec Tomcat, Jetty, JBoss et GlassFish -- "default"
Le nom du servlet par défaut fourni avec Google App Engine : "_ah_default".
Le nom du servlet par défaut fourni avec Resin -- "resin-file"
Le nom du servlet par défaut fourni avec WebLogic -- "FileServlet"
Le nom du servlet par défaut fourni avec WebSphere -- "SimpleFileServlet"
Méthode 2 : mvc:resources est fourni au printemps 3.0.4 et dans les versions ultérieures. Comment utiliser :
<!-- Accès aux fichiers de ressources statiques--> <mvc:resources mapping="/images/**" location="/images/" />
Description : /images/** est mappé à ResourceHttpRequestHandler pour le traitement, et l'emplacement spécifie l'emplacement de la ressource statique. Il peut se trouver sous le répertoire racine de l'application Web ou dans le package jar, afin que les ressources statiques puissent y être compressées. le paquet de pots. la période de cache peut permettre la mise en cache Web des ressources statiques
Troisième méthode, utilisez <mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
L'URL "/**" sera enregistrée dans l'urlMap de SimpleUrlHandlerMapping, et l'accès aux ressources statiques sera transféré de HandlerMapping vers org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler pour traitement et retour.
DefaultServletHttpRequestHandler utilise le servlet par défaut de chaque conteneur de servlet.
Remarque complémentaire : problèmes liés à l'ordre d'exécution de plusieurs HandlerMappings :
La valeur de l'attribut de commande de DefaultAnnotationHandlerMapping est : 0
<mvc:resources/>La valeur de l'attribut de commande du SimpleUrlHandlerMapping automatiquement enregistré est : 2147483646
<mvc:default-servlet-handler/>La valeur de l'attribut de commande du SimpleUrlHandlerMapping automatiquement enregistré est : 2147483647
Spring exécutera d'abord la commande avec une valeur plus petite. Lorsque vous accédez à un fichier image a.jpg, recherchez d'abord le processeur via DefaultAnnotationHandlerMapping. Il ne doit pas être trouvé car nous n'avons pas d'action appelée a.jpg. Recherchez ensuite par ordre croissant de valeur de commande. Puisque le dernier SimpleUrlHandlerMapping correspond à "/**", il correspondra certainement et vous pourrez répondre à l'image.
Pour accéder à une image, il faut passer par des couches de correspondance. Vous ne savez pas comment se déroule la performance ?
Enfin, permettez-moi d'expliquer que lors de l'accès aux ressources statiques dans les schémas 2 et 3, s'il existe un intercepteur total correspondant (approximatif), l'intercepteur sera utilisé. Si vous implémentez la vérification des autorisations lors de l'interception, veillez à filtrer ces demandes pour les fichiers statiques.
Si votre DispatcherServlet intercepte les suffixes d'URL tels que *.do, les problèmes ci-dessus n'existeront pas. Il est toujours pratique d'avoir un suffixe.