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


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

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

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

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

即可访问到对应的servlet。 

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

如此配置:


	testServlet
	/test1


	testServlet
	/test2
或:


	testServlet
	/test1
	/test2

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


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


	testServlet
	/test1.do


	testServlet
	/test2.do
或:


	testServlet
	/test1.do
	/test2.do
上面亲测可以。


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

如:


	testServlet
	/test1


	testServlet
	/test2.do


	testServlet
	/test1
	/test2.do

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

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

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


二.路径匹配

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

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

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

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

三. 后缀拓展名匹配。

	*.do
注意:/*.do 不可以,报错

注意:通配符 *,* /*都不可以,报错

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






你可能感兴趣的:(servlet)