Spring mvc中不能引入js等静态文件问题的解决方案

来源:互联网 发布:access数据库怎么做 编辑:程序博客网 时间:2024/05/21 06:19

No mapping found for HTTP request with URI [/.../script/jquery-3.1.0.min.js] in DispatcherServlet with name 'springDispatcherServlet'

分析一下为什么会有这样的问题:

首先看一下springDispatcherServlet 的配置

<servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- Map all requests to the DispatcherServlet for handling --><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

这里的url-pattern 配置是/  所以SpringMVC 会捕获WEB 容器的所有请求,包括静态资源的请求,SpringMVC会将他们当作一个普通请求去找对应的处理器,因找不到导致了报错

但是你去修改这个url-pattern 配置又不符合 REST资源URL的风格,因为REST 是不希望出现带.html 或者.do 之类的后缀,所以只能另寻途径

打开SpringMVC 的配置文件,添加以下两个配置

<mvc:default-servlet-handler /><mvc:annotation-driven></mvc:annotation-driven>

起作用的是<mvc:default-servlet-handler /> 

default-servlet-handler 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler, 它会对进入 DispatcherServlet 的请求进行筛查, 如果发现是没有经过映射的请

求, 就将该请求交由 WEB 应用服务器默认的Servlet 处理. 如果不是静态资源的请求,才由 DispatcherServlet 继续处理

一般 WEB 应用服务器默认的 Servlet 的名称都是 default.

    <servlet>        <servlet-name>default</servlet-name>        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>        <init-param>            <param-name>debug</param-name>            <param-value>0</param-value>        </init-param>        <init-param>            <param-name>listings</param-name>            <param-value>false</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>


若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定

这里还需要注意的是静态资源文件的位置,静态资源需要放在WebContent 目录下,如果放在WebContent /WEN-INF 目录下,就算配置了上述配置,那也会出现404 错误,而

且这时候Tomcat 会由于上述配置的原因不发出警告的


1 0
原创粉丝点击