Servlet映射地址配置

Servlet在编写完毕后,必须先在web.xml中配置才能访问。在配置时,需要指定一个Servlet的访问地址。Servlet映射地址不是随便 怎么写都可以,必须要遵从一定的规则,这个规则在Servlet的规范中有详细的说明。按照Servlet规范的要求,Servlet映射地址形式只能有 四种,即: 

  第一种、以“/”开头,以“/*”结束的地址,这种地址映射称为路径映射。这种映射中使用了通配符,代表访问这个目录下的任意一个地址都将调用这个Servlet。比如,一个Servlet映射的地址是“/admin/*”,那么当访问/admin这个目录下的任意一个地址,都会映射到这个Servlet上,除非这个地址已经明确地映射到其它的Servlet上了。也即,当另外一个Servlet映射的地址是 “/admin/listUser”,那么当访问这个地址时,请求还是会被映射到这人Servlet上。 

  第二种、以“*.”开头的地 址,这种地址映射称为扩展名映射。这也是一种模糊映射,代表访问相同扩展名的地址时,都会映射到这个Servlet上。这种地址映射在Struts中就得 到了应用,即所有访问以.do结束的地址时,都会映射到ActionServlet上。但不能将第一种与第二种地址映射形式结合起来用,即如果写成 “/admin/*.do”,这就错了。没有原因,因为这是规范。 

  第三种、只有一个“/”的地址映射,这种地址映射称为默认映射。也就是说,如果用户访问了一个地址,这个地址没有明确地在web.xml中映射,也不满足以上两种形式的模糊映射,这个时候就访问“/”映射的 Servlet。这种地址映射,我们在实际开发中很少应用,但它对服务器来说是很重要的。以Tomcat为例,Tomcat实际上是一个纯粹的 Servlet容器,也就是说,只有Servlet才能在Tomcat上运行。但有可能会说,我们将HTML文件部署到Tomcat上也运行得很好啊。没 错,但真正运行的还是Servlet。什么意思呢?大家可以想一下,我们部署到服务器上所有的HTML文件,我们从来都不会到web.xml中去映射的, 根据我们刚刚讲到的,如果访问了没有映射的地址,服务器会访问“/”所对应的Servlet,而正是这个Servlet帮我们找到HTML文件,并把它写 到客户端的。也就是说,Tomcat预先定义了一个Servlet,并把它的地址映射为“/”。这样其它静态资源的访问实际上都是在访问这个 Servlet,而它的职责则是简单地找到这个文件,并把它们写到响应中去。 

  第四种、明确的地址映射,这是我们最常用的一种地址映射形式。规范中没有对这种地址映射有特殊的要求,但在配置地址时,必须以“/”开头才可以,否则将报错。 



面试实例:


一个元素用于映射一个已经注册的Servlet的一个对外访问路径,它包含有两个子元素:和分别用于指定Servlet的注册名称和Servlet的对外访问路径。 Name /hello/hello.html Servlet的对外访问路径的/可以用*通配符替换它有两种规定的格式 a. *.扩展名 匹配.do结尾的URL b. /action/* 表示当前程序下子路径下所有URL 下面归纳了几种映射关系

1./abc/* ------1

2./* ------2

3./abc ------3

4.*.do ------4

注意:*.do的优先级最低

通过归纳的映射关系我们可以总结以下的一些行为

当请求URL为"/abc/a.html"时,"/abc/*"和"/*"都可以匹配这个URL 则Servlet引擎将调用1

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值