servlet-mapping元素及其子元素
<servlet-mapping>元素在Servlet和URL样式之间定义一个映射。它包含了两个子元素<servlet- name>和<url-pattern>,<servlet-name>元素给出的Servlet名字必须是在<servlet>元素中声明过的Servlet的名字。<url-pattern>元素指定对应于Servlet的URL路径,该路径是相对于Web应用程序上下文根的路径。例如:
<servlet-mapping> |
Servlet 2.5规范允许<servlet-mapping>的<url-pattern>子元素出现多次,之前的规范只允许一个<servlet-mapping>元素包含一个<url-pattern>子元素。我们看下面的例子:
<servlet-mapping> |
在配置了Servlet与URL样式之间的映射后,当Servlet容器接收到一个请求,它首先确定该请求应该由哪一个Web应用程序来响应。这是通过比较请求URI的开始部分与Web应用程序的上下文路径来确定的。映射到Servlet的路径是请求URI减去上下文的路径,Web应用程序的Context对象在去掉请求URI的上下文路径后,将按照下面的路径映射规则的顺序对剩余部分的路径进行处理,并且在找到第一个成功的匹配后,不再进行下一个匹配。
容器试着对请求的路径和Servlet映射的路径进行精确匹配,如果匹配成功,则调用这个Servlet来处理请求。
容器试着匹配最长的路径前缀,以斜杠(/)为路径分隔符,按照路径树逐级递减匹配,选择最长匹配的Servlet来处理请求。
如果请求的URL路径最后有扩展名,如.jsp,Servlet容器会试着匹配处理这个扩展名的Servlet。
如果按照前面3条规则没有找到匹配的Servlet,容器会调用Web应用程序默认的Servlet来对请求进行处理,如果没有定义默认的Servlet,容器将向客户端发送HTTP 404错误信息(请求资源不存在)。
在部署描述符中,可以使用下面的语法来定义映射。
以/开始并且以 /* 结束的字符串用来映射路径,例如:
<url-pattern>/admin/*</url-pattern> |
如果没有精确匹配,那么对/admin/路径下的资源的所有请求将由映射了上述URL样式的Servlet来处理。
以 *. 为前缀的字符串用来映射扩展名,例如:
<url-pattern>*.do</url-pattern> |
如果没有精确匹配和路径匹配,那么对具有.do扩展名的资源的请求将由映射了上述URL样式的Servlet来处理。
以一个单独的/指示这个Web应用程序是默认的Servlet,例如:
<url-pattern>/</url-pattern> |
如果对某个请求没有找到匹配的Servlet,那么将使用Web应用程序的默认Servlet来处理。
所有其他的字符被用于精确匹配,例如:
<url-pattern>/login</url-pattern> |
如果请求/login,那么将由映射了URL样式/login的Servlet来处理。
最新文章
- SAAS在中国市场的发展前景
- kinect driver install (ubuntu 14.04 &; ros-indigo)
- 仿哔哩哔哩应用客户端Android版源码项目
- 2015GitWebRTC编译实录13
- Collection List Set和Map用法与区别
- UWP深入学习四:动画及图像
- 基于IHttpAsyncHandler的实时大文件传送器
- Java Web利用POI导出Excel简单例子
- Implicit Object in JSP
- 10 个实用的 jQuery 表单操作代码片段
- IO负载高的来源定位
- Linux下tar.xz结尾的文件的解压方法
- Android2.2 API —— ImageView
- window.location.href问题,点击,跳转到首页
- 现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<;100
- 如何使用Python读取大文件
- [ SSH框架 ] Hibernate框架学习之四(JPA)
- 把玩Javascript中的bind
- MySQL -- Innodb的关闭
- python操作Excel的几种方式