1.前言
因为在开发的时候不涉及web.xml的配置工作,所以对于serlvet的<url-patten>/和/以及*.do等一直很模糊
2.servlet中有默认的serlvet
tomcat容器里面有几个默认的serlvet,他们在容器启动的时候被加载,defalur servet处理静态资源(css/js/image)等,默认的<url-patten> 是/, jsp servelt处理jsp文件 <url-patten> 是 *.jsp
4.<url-patten>/*</url-patten>
a.这个是个bad pattern,它替换了所有default servlet和jsp servlet。
也就是说,如果你有serlvet,它的url-patten是/*,它就会替换tomcat中default servlet
eg.比如说你有两个serlvet
<servlet-mapping>
<servlet -name>xxx
<url-patten>/app/*
<servlet -mapping>
<servlet -name>xxx
<url-patten>/*
发一个请求ip:port/context/app/xxxx
这样你的会请求到第一个serlvet,但是如果你的这个servlet需要返回jsp,或者你的jsp引用你的静态资源,在处理静态字段时都走你定义url-patten是/*的serlvet,所以在serlvet上定义url-pattern是错误的
b.但是需要在filter中定义这种格式的url-patten,因为他会过滤尽可能多的url
5.<url-patten>/</url-patten>
它只会替换tomcat中的default Servlet,servletcontainer的内置 default Servlet 可以处理静态资源文件, 还能够处理HTTP缓存请求,媒体(音频/视频)流和文件下载恢复,如果不想重写这些个功能,就不需要使用这中方式,当然,这个方式不会替换jsp servlet。
6.好的url-pattern
所以好的url-pattern 应该定义成*.do,/app/*等
7.有些项目需要让url更好看需要使用
<url-patten>/</url-patten>,那么使用mvc的处理静态资源的办法吧 http://stackoverflow.com/questions/1483063/how-to-handle-static-content-in-spring-mvc
参考资料
版权声明:本文为xulinan3121原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。