Los ejemplos de este artículo resumen los métodos de procesamiento comunes de archivos estáticos en Javaweb, que tienen un gran valor práctico en el desarrollo de programas Javaweb. Los métodos específicos se resumen a continuación:
Método 1: active el servlet predeterminado de Tomcat para procesar archivos estáticos
Agregue web.xml:
<servlet-mapping> <servlet-name>predeterminado</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>predeterminado</ nombre-servlet> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>predeterminado</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
Nota: Debe escribirse delante de DispatcherServlet y dejar que defaultServlet intercepte la solicitud primero, para que la solicitud no ingrese a Spring. Creo que el rendimiento es el mejor.
El nombre del servlet predeterminado que viene con Tomcat, Jetty, JBoss y GlassFish: "predeterminado"
El nombre del servlet predeterminado que viene con Google App Engine: "_ah_default"
El nombre del servlet predeterminado que viene con Resin: "archivo-resin".
El nombre del servlet predeterminado que viene con WebLogic: "FileServlet"
El nombre del servlet predeterminado que viene con WebSphere: "SimpleFileServlet".
Método 2: mvc:resources se proporciona en Spring 3.0.4 y versiones posteriores. Cómo utilizar:
<!-- Acceso a archivos de recursos estáticos--> <mvc:resources mapping="/images/**" location="/images/" />
Descripción: /images/** se asigna a ResourceHttpRequestHandler para su procesamiento y la ubicación especifica la ubicación del recurso estático. Puede estar en el directorio raíz de la aplicación web o dentro del paquete jar, para que los recursos estáticos se puedan comprimir. el paquete del frasco. cache-period puede permitir que los recursos estáticos se almacenen en caché web
Método tres, utilice <mvc:default-servlet-handler/>
<mvc:controlador-de-servlet-predeterminado/>
La URL "/**" se registrará en el mapa de URL de SimpleUrlHandlerMapping y el acceso a los recursos estáticos se transferirá de HandlerMapping a org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler para su procesamiento y devolución.
DefaultServletHttpRequestHandler utiliza el servlet predeterminado de cada contenedor de servlet.
Nota complementaria: Problemas con el orden de ejecución de múltiples HandlerMappings:
El valor del atributo de orden de DefaultAnnotationHandlerMapping es: 0
<mvc:resources/>El valor del atributo de pedido del SimpleUrlHandlerMapping registrado automáticamente es: 2147483646
<mvc:default-servlet-handler/>El valor del atributo de pedido del SimpleUrlHandlerMapping registrado automáticamente es: 2147483647
Spring ejecutará primero la orden con un valor menor. Al acceder a un archivo de imagen a.jpg, primero busque el procesador a través de DefaultAnnotationHandlerMapping. No se debe encontrar porque no tenemos una acción llamada a.jpg. Luego busque en orden ascendente el valor del pedido. Dado que el último SimpleUrlHandlerMapping coincide con "/**", definitivamente coincidirá y podrá responder a la imagen.
Para acceder a una imagen, debes pasar por capas de coincidencia. ¿No estás seguro de cómo es el rendimiento?
Finalmente, permítanme explicar que al acceder a recursos estáticos en el Esquema 2 y el Esquema 3, si hay un interceptor total coincidente (aproximado), se utilizará el interceptor. Si implementa la verificación de permisos en la intercepción, tenga cuidado de filtrar estas solicitudes para archivos estáticos.
Si su DispatcherServlet intercepta sufijos de URL como *.do, los problemas anteriores no existirán. Sigue siendo conveniente tener un sufijo.