servlet-mapping url-pattern映射路径研究

来源:互联网 发布:大数据ppt模板免费下载 编辑:程序博客网 时间:2024/05/16 20:28

在使用servlet时需要配置url-pattern的请求路径映射到某个servlet类,映射路径到底怎么配置呢?

书上给出大的分类3种分类我们来分析下:

一.精确匹配,即一层路径,前面没再有路径名。

1.1直接的请求名称,无后缀,如"/test1",输入请求地址如"http://localhost:8080/pro/test1"

即可访问到对应的servlet。 

猜想:多个并列的类似"/test1"的请求同时映射到同一servlet类?实验答案:可以的。

如此配置:

<servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test1</url-pattern></servlet-mapping><servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test2</url-pattern></servlet-mapping>
或:

<servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test1</url-pattern><url-pattern>/test2</url-pattern></servlet-mapping>

亲自运行都可以映射到访问的servlet类。


1.2带后缀的精确单层路径,如"/test1.do",并且多个带后缀的路径对应同一个servlet类的配置。

<servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test1.do</url-pattern></servlet-mapping><servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test2.do</url-pattern></servlet-mapping>
或:

<servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test1.do</url-pattern><url-pattern>/test2.do</url-pattern></servlet-mapping>
上面亲测可以。


如果带不带后缀的和带后缀的一起映射?

如:

<servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test1</url-pattern></servlet-mapping><servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test2.do</url-pattern></servlet-mapping>

<servlet-mapping><servlet-name>testServlet</servlet-name><url-pattern>/test1</url-pattern><url-pattern>/test2.do</url-pattern></servlet-mapping>

上面可以看到:1.有没有后缀是不影响的,后缀名不是一定需要的。

2.多个精确的路径可以映射到同一servlet类。

3.必须有"/",没有会404,亲测


二.路径匹配

路径匹配就是请求的上下文路径后面再有至少一层路径的请求匹配。

1.1单路径(后面精确路径带不带后缀都可以)

<url-pattern>/test/test1</url-pattern>
1.2多层路径(后面精确路径带不带后缀都可以)
<url-pattern>/test/pp/test1</url-pattern>
1.3路径后通配符

<url-pattern>/test/*</url-pattern>
注意:<url-pattern>/test/*.do</url-pattern> 不可以,启动项目报错, 模糊匹配方式不能同时使用(路径模糊匹配和后缀模糊匹配)。前面的"/"也不能少

三. 后缀拓展名匹配。

<url-pattern>*.do</url-pattern>
注意:<url-pattern>/*.do</url-pattern> 不可以,报错

注意:通配符 *,<url-pattern>*</url-pattern> <url-pattern>/*</url-pattern>都不可以,报错

1url-pattern(请求servlet的映射路径)要么以 / 开头,要么以*开头。  例如, 只写test是非法路径。

2不能同时使用两种模糊匹配,例如 /test/*.do是非法路径

3当有输入的URL有多个servlet同时被匹配的情况下:

  3.1 精确匹配优先。(长的最像优先被匹配,这里就做不验证了)

  3.2 以后缀名结尾的模糊url-pattern优先级最低

4)虽然能够以/开头(/和/*两种写法是等价的),但是不推荐这种写法


部分参考文章地址:http://www.cnblogs.com/fnz0/p/5586019.html