昨天写过一篇
在写 mvc:resources 配置,少写了一些。因此,在项目访问时,报错404.
<!-- 过滤静态资源 --> <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/pages/assets/**" location="/pages/assets/" /> <mvc:resources mapping="/pages/js/**" location="/pages/js/" /> <mvc:annotation-driven/> <mvc:default-servlet-handler/>
上面三个是过滤静态资源,而下面两个,分别是:
1、<!-- 启用spring mvc 注解 -->
mvc:annotation-driven:
参考文章地址:
http://blog.csdn.net/jbgtwang/article/details/7359592
描述是:
最后的配置如果没有<mvc:annotation-driven/>,那么所有的Controller可能就没有解析,所有当有请求时候都没有匹配的处理请求类,就都去<mvc:default-servlet-handler/>即default
servlet处理了。添加上<mvc:annotation-driven/>后,相应的do请求被Controller处理,而静态资源因为没有相应的Controller就会被default servlet处理。总之没有相应的Controller就会被default servlet处理就ok了。
要使用spring mvc中的@Controller注解,就必须要配置<mvc:annotation-driven
/>,否则org.springframework.web.servlet.DispatcherServlet无法找到控制器并把请求分发到控制器。
2、<!-- 配置默认servlet handler -->
mvc:default-servlet-handler:
参考文章:Spring MVC使用mvc:resources和mvc:default-servlet-handler标签来处理静态资源
下面一段文字,为完全复制:
<mvc:default-servlet-handler />会把/** url注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler处理并返回。DefaultServletHttpRequestHandler使用的就是各个Servlet容器自己默认的Servlet。
也就是说,在springMVC中,mvc:default-servlet-handler,等同于
在web.xml中配置default。
***********************************************************分割线***********************************************************
在web.xml中配置拦截的方式, 激活Tomcat的defaultServlet来处理静态文件 在web.xml中配置default是有缺点的,暂时忘记缺点是什么了,以后补记。
web.xml,是由tomcat加载,来进行筛选过滤的。
参考文章:
http://blog.sina.com.cn/s/blog_6fda308501018iyu.html
是针对 tomcat,WebLogic等,不同服务器,配置是不同的。
在web.xml中 的 default ,是针对tomcat 服务器的配置。
要写在DispatcherServlet的前面, 让 defaultServlet先拦截,这个就不会进入Spring了
Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 -- "default"
Google App Engine 默认 Servlet的名字 -- "_ah_default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字 -- "FileServlet"
WebSphere 默认 Servlet的名字 -- "SimpleFileServlet"