Spring MVC DispatcherServlet url-pattern配置拦截静态资源

    技术2022-07-12  73

    web.xml中配置

    <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

    一般url-pattern配置都是/

    这样配置会拦截html,js css等静态资源 因为Web容器Tomcat中有一个DefatulServlet 主要提供静态资服务默认的url-pattern也是/ 这里覆盖了,

    JSP为什么不拦截呢? 容器tomcat 中还有一个JspServlet,这里并没有重写 <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>

    解决方法一

    spingmvc配置文件中使用下面标签就可以了

    <mvc:default-servlet-handler/>

    会在Spring上下文中定义一个DefaultServletHttpRequestHandler对象 会对进行DispatcherServelt的请求进行过滤,如果发现是一个静态资源请求,会把请求转给Web容器-Tomcat处理 不是静态资源,继承由SpringMVC管理 缺点:静态资源只能放在Webapp根目录下,可以建立目录

    解决方法二

    使用<mvc:resources标签

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

    location元素表示webapp目录下的static包下的所有文件; 这里是resources目录 mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b; mapping这里表示以resources开头的请求路径 如: http://localhost:8088/resources/test1.html

    解决方法三-web.xml中配置defaultServlet的mapping

    <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> <url-pattern>*.css</url-pattern> <url-pattern>*.html</url-pattern> <url-pattern>*.htm</url-pattern> <url-pattern>*.png</url-pattern> <url-pattern>*.jpg</url-pattern> <url-pattern>*.gif</url-pattern> <url-pattern>*.ico</url-pattern> </servlet-mapping>
    Processed: 0.023, SQL: 9