servlet的注册和映射

Servlet程序需要在web.xml中注册和映射,才可以被Servlet引擎加载和被外界访问,通常
存储在<WEB应用程序目录>\WEB-INF\class目录中。


[size=medium]1. Servlet注册[/size]


<web-app>
...
<servlet>
<servlet-name>nameToRegister</servlet-name>
<servlet-class>com.john.Threaten</servlet-class>
</servlet>
...
</web-app>

servlet-name是注册到引擎的servlet名称,需要符合规范(可以包含空格)且唯一。
servlet-class是servlet类的全限定名,就是把包名带上。


[size=medium]2. Servlet映射[/size]


<web-app>
...
<servlet-mapping>
<servlet-name>nameToRegister</servlet-name>
<url-pattern>/myservlet</url-pattern>
</servlet-mapping>
...
</web-app>

servlet-name是已经注册的servlet名称。
url-pattern是映射的路径,可以使用*通配符,但是只能有两种固定的格式,且不能混合使用:
a. [color=blue]*.扩展名[/color]
b. [color=blue]斜杠(/)开头并以(/*)结尾[/color]

请求的路径符合该pattern就会调用servlet-name指定的servlet处理。


[size=medium]3. servlet和servlet-mapping的关联[/size]

servlet是唯一的,多个不同的servlet-mapping可以映射到同一个servlet上:


<web-app>
...
<servlet-mapping>
<servlet-name>nameToRegister</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>nameToRegister</servlet-name>
<url-pattern>/treaty/*</url-pattern>
</servlet-mapping>
...
</web-app>

url符合*.do或者/treaty/*都会映射到注册名为nameToRegister的servlet上。


[size=medium]4. 映射优先级[/size]

[size=small]a. io文件和映射[/size]


<servlet-mapping>
<servlet-name>nameToRegister</servlet-name>
<url-pattern>/test/myservlet.html</url-pattern>
</servlet-mapping>

在test目录下有myservlet.html文件,那么servlet引擎是调用这个html文件还是nameToRegister呢?

答案是后者

[size=small]b. 多个映射之间[/size]

有以下按照优先级从高到低的映射:
[color=darkred]/theatre/*[/color] 映射到 [color=violet]ServletA[/color]
[color=darkred]/*[/color] 映射到 [color=violet]ServletB[/color]
[color=darkred]/theatre[/color] 映射到 [color=violet]ServletC[/color]
[color=darkred]*.do[/color] 映射到 [color=violet]ServletD[/color]

当请求URL为"theatre/retreat.html"时, /theatre/*和/*都可以匹配,Servlet引擎将调用[color=violet]ServletA[/color]

当请求URL为"/theatre"时,"/theatre/*"和”/theatre"都可以匹配这个URL,Servlet引擎将调用[color=violet]ServletC[/color]

当请求URL为"/theatre/retreat.do"时,"/theatre/*"和"*.do"都可以匹配这个URL,Servlet引擎将调用[color=violet]ServletA[/color]

当请求URL为"/retreat.do"时,"/*"和"*.do"都可以匹配这个URL,Servlet引擎将调用[color=violet]ServletB[/color]

当请求URL为"/cheat/wheat/retreat.do"时,"/*"和"*.do"都可以匹配这个URL,Servlet引擎将调用[color=violet]ServletB[/color]

可以看出,匹配是按照最相符以及优先级原则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值