2010-09-18 13 views
5

Estoy construyendo una aplicación Spring MVC, y el servlet frontController está mapeado en "/" interceptando todas las solicitudes, podría ser capaz de servir los contenidos estáticos (.js ,. css, .png ...) de tomcat y no de Spring. Mi estructura de aplicación esTomcat sirviendo recursos estáticos en la aplicación Spring MVC

-webapp/ 
    styles/ 
    images/ 
    WEB-INF/ 
      views/ 

Por defecto, porque el frontController se mapea en la raíz de contexto de mi aplicación de sus maneja todas las peticiones, pero no sirve a ningún recurso estático. La configuración de mvc para recursos estáticos es la siguiente.

<mvc:resources mapping="/resources/**" location="/"/> 

Y el código de la página es:

<img src="resources/images/logo.png" /> 

necesito configurar Tomcat para servir a los recursos estáticos sin interacción primavera.

¿Alguna sugerencia?

Respuesta

1

Eche un vistazo a this mailing list thread y vea si eso hace lo que está buscando.

+1

Tanques, he encontrado la solución, solo asocie las extensiones de recursos estáticos a defaultServlet. – Rigoni

7

Puede reasignar el servlet predeterminado de Tomcat (que maneja el contenido estático), p.

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/images/*</url-pattern> 
</servlet-mapping> 
1

Otra posible solución - Sólo tiene que añadir lo siguiente a la primavera DispatcherServlet.xml (Spring Docs)

<mvc:default-servlet-handler/> 

Esta etiqueta permite el mapeo de la DispatcherServlet a "/" (anulando así la asignación de el Servlet por defecto del contenedor), al mismo tiempo que permite que las solicitudes de recursos estáticos sean manejadas por el servlet predeterminado del contenedor. Configura un DefaultServletHttpRequestHandler con una asignación de URL (dada una orden de prioridad más baja) de "/ **". Este controlador reenviará todas las solicitudes al Servlet predeterminado.

Pros (en comparación con la solución de @ nos)

  • la URL solución de reasignación se comporta de manera diferente dependiendo de su contenedor. Jetty/Tomcat 6 toma eso para significar 'map URL/images/* a WEBAPP/images/'. Tomcat < 6 (y tal vez otros) toman eso para indicar 'map URL/images/ a WEBAPP/*', que es una GRAN violación de seguridad.
  • Si desea publicar un favicon.ico, robots.txt etc. de su sitio, tendrá para crear asignaciones de URL adicionales para ellos.

Contras

  • La primavera está en el bucle, que es definitivamente algo que es innecesario.

Además, independientemente de la solución que prefiera, sugiero agregar lo siguiente a su web.xml para evitar listados de directorios (en, por ejemplo, URL/imágenes)

<servlet> 
    <servlet-name>default</servlet-name> 
    <init-param> 
     <param-name>dirAllowed</param-name> 
     <param-value>false</param-value> 
    </init-param> 
</servlet> 
Cuestiones relacionadas