<servlet-mapping>元素在Servlet和URL样式之间定义一个映射。它包含了两个子元素<servlet- name>和<url-pattern>,<servlet-name>元素给出的Servlet名字必须是在<servlet>元素中声明过的Servlet的名字。<url-pattern>元素指定对应于Servlet的URL路径,该路径是相对于Web应用程序上下文根的路径。例如:

<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

Servlet 2.5规范允许<servlet-mapping>的<url-pattern>子元素出现多次,之前的规范只允许一个<servlet-mapping>元素包含一个<url-pattern>子元素。我们看下面的例子:

<servlet-mapping>
<servlet-name>welcome</servlet-name>
<url-pattern>/en/welcome</url-pattern>
<url-pattern>/zh/welcome</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来处理。

最新文章

  1. SAAS在中国市场的发展前景
  2. kinect driver install (ubuntu 14.04 &amp; ros-indigo)
  3. 仿哔哩哔哩应用客户端Android版源码项目
  4. 2015GitWebRTC编译实录13
  5. Collection List Set和Map用法与区别
  6. UWP深入学习四:动画及图像
  7. 基于IHttpAsyncHandler的实时大文件传送器
  8. Java Web利用POI导出Excel简单例子
  9. Implicit Object in JSP
  10. 10 个实用的 jQuery 表单操作代码片段
  11. IO负载高的来源定位
  12. Linux下tar.xz结尾的文件的解压方法
  13. Android2.2 API —— ImageView
  14. window.location.href问题,点击,跳转到首页
  15. 现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N&lt;100
  16. 如何使用Python读取大文件
  17. [ SSH框架 ] Hibernate框架学习之四(JPA)
  18. 把玩Javascript中的bind
  19. MySQL -- Innodb的关闭
  20. python操作Excel的几种方式

热门文章

  1. c语言-折半查找的函数
  2. JAVA输入随笔
  3. 子元素margin-top为何会影响父元素?
  4. python设计模式--读书笔记
  5. idea常用快捷汇总
  6. Train Problem II(卡特兰数 组合数学)
  7. 3dsmax2015卸载/安装失败/如何彻底卸载清除干净3dsmax2015注册表和文件的方法
  8. VSCode快捷键整理
  9. centos 7编译安装mysql 5.7.17
  10. 我的Python升级打怪之路【三】:Python函数