TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
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,而它的职责则是简单地找到这个文件,并把它们写到响应中去。 第四种、明确的地址映射,这是我们最常用的一种地址映射形式。规范中没有对这种地址映射有特殊的要求,但在配置地址时,必须以“/”开头才可以,否则将报错。 总结以上几种地址形式,我们可以了解到服务器在接收到一个地址请求后的处理流程。以一个用户访问http://www.java1995.com/class_intro/viewClassIntro.htm?id=1这个地址为例: 第一步,服务器首先看/class_intro/viewClassIntro.htm这个地址有没有明确地映射,如果已经明确地映射了这个地址,则直接访问地址所对应的Servlet,处理请求生成响应。
第二步,如果没有明确映射这个地址,则看目录映射或扩展名映射中有没有满足这个地址的。也即有没有映射地址为“/class_intro/*”,或者 “*.htm”的Servlet,如果有一个满足就访问其所对应的Servlet。如果两个都满足,则访问目录映射所对应的Servlet。
第三步,如果也不满足模糊映射,则访问“/”所对应的Servlet。 下面归纳了几种映射关系
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 |
|