博文第7章-链接:http://elf8848.iteye.com/blog/875830
如果你的DispatcherServlet拦截"/*",则会把返回的jsp页面也拦截了(错误配置).
如何你的DispatcherServlet拦截"*.do",这样的有后缀的URL,就不存在访问不到静态资源的问题。
如果你的DispatcherServlet拦截"/",则拦截所有的请求(*.js,*.jpg等静态文件要另外处理)
如果将DispatcherServlet的请求映射配置为“/”,则springmvc会捕获web容器的所有请求,包括静态资源的请求,springmvc会同i将它们当成一个普通的请求进行处理,
也就会出现找不到对应的处理器进而报错。(不能配置为“/*”,不然返回jsp文件的时候会再次被拦截??)
解决方式:
---方式1:配置<mvc:default-servlet-handler />,springmvc会通过DefaultServletHttpRequestHandler进行判断,将静态资源文件(*.jsp)交回web应用服务器默认的Servlet处理。
链接:http://www.noday.net/articles/2011/08/27/1314458236410.html
---方式2:配置<mvc:resources>处理,静态资源由springmvc自己处理。
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/html/**" location="/html/"/>
<mvc:resources mapping="/common/**" location="/common/"/>
---方案3:激活Tomcat的defaultServlet来处理静态文件。
要写在DispatcherServlet的前面,让defaultServlet先拦截请求,这样请求就不会进入Spring了。
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <!-- Tomcat, Jetty, JBoss, and GlassFish 自带的默认Servlet的名字 -- "default" Google App Engine 自带的 默认Servlet的名字 -- "_ah_default" Resin 自带的 默认Servlet的名字 -- "resin-file" WebLogic 自带的 默认Servlet的名字 -- "FileServlet" WebSphere 自带的 默认Servlet的名字 -- "SimpleFileServlet" -->