<url-pattern>是<servlet-mapping>的子元素,用来指定servlet的访问路径,即URL。它必须是以“/”开头!
1)可以在<servlet-mapping>中给出多个<url-pattern>,例如:
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/AServlet</url-pattern>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
- 1
- 2
- 3
- 4
- 5
那么这说明一个servlet绑定了两个URL,无论访问/AServlet还是/BServlet,访问的都是AServlet
2)还可以在中使用通配符,所谓通配符就是星号"*"
星号可以匹配任何URL前缀或者后缀,使用通配符可以命名一个servlet绑定一组URL,例如:
<url-pattern>/AServlet/*</url-pattern> /AServlet/a,/AServlet/b,都是匹配/AServlet/*;路径匹配
<url-pattern>.do</url-pattern> /abc/def/ghi.do,/a.do 都是匹配.do 扩展名匹配
<url-pattern>/*</url-pattern> 匹配所有URL 全匹配
- 1
- 2
- 3
- 4
- 5
请注意,通配符要么为前缀,要么为后缀,不能出现在URL中间位置,也不能只有通配符。例如:/.do是错误的,因为星号出现在URL的中间位置上了。.*也是不对的,因为一个URL中最多只能出现一个通配符
注意,通配符是一种模糊匹配URL的方式,如果存在更具体的,那么访问路径会去具体的。例如:
<servlet>
<servlet-name>InitServletHeHe</servlet-name>
<servlet-class>com.InitServlet.InitServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InitServletHeHe</servlet-name>
<url-pattern>/InitServlet</url-pattern>
</servlet-mapping>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
<url-pattern>/</url-pattern>:
servlet的url-pattern设置为/时, 它仅替换servlet容器的默认内置servlet,用于处理所有与其他注册的servlet不匹配的请求。直白点说就是,所有静态资源(js,css,image,html等)的访问都将交给该servlet处理,而jsp页面则交给servlet容器内置的JSP servlet处理。
如果设置:/ 则静态资源无法访问,jsp文件可以正常访问
如果需要访问静态资源则需要放行。详细配置文档请看我另外一篇文章。
链接: springMvc放行静态资源的多种方式.
<url-pattern>/*</url-pattern>:
servlet的url-pattern设置为/*时,它会覆盖其他所有的servlet,包括servlet容器提供的所有servlet,如缺省servlet和JSP servlet。 无论你发出什么请求,都会在该servlet拦截处理。通常我们不会这么做。如果你只是想使用/*,那么你可以在Filter中使用,它处理完后会将url交给servlet处理。
如果设置:/* 则静态资源和jsp文件都不能正常访问,不建议这样使用
<url-pattern></url-pattern>:
这种空串的形式。当上下文的根被请求的时候,它将被调用。这与的方式是不同的,因为这种形式在当任何子目录被请求的时候不会被调用。当你期望一个“首页servlet”的时候,这种URL模式就是适合你的。
<url-pattern>*.do</url-pattern>:
/abc/def/ghi.do,/a.do 都是匹配*.do 扩展名匹配。如果不是这个扩展名的url将不会被拦截
<url-pattern>/**</url-pattern>:
什么请求都不能拦截处理,相当于没有设置: