首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

servlet的登记和映射

2012-08-08 
servlet的注册和映射Servlet程序需要在web.xml中注册和映射,才可以被Servlet引擎加载和被外界访问,通常存

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


1. Servlet注册

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

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


2. Servlet映射

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

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

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


3. servlet和url-pattern的关联

servlet是唯一的,多个不同的url-pattern可以映射到同一个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上。


4. 映射优先级

a. io文件和映射

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

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

答案是后者

b. 多个映射之间

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

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

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

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

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

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

可以看出,匹配是按照最相符以及优先级原则

热点排行
Bad Request.