<servlet-mapping>元素在Servlet和URL样式之间定义一个映射。它包含了两个子元素<servlet- name>和<url-pattern>

<servlet-name>元素给出的Servlet名字必须是 在<servlet>元素中声明过的Servlet的名字

<url-pattern>元素指定对应于Servlet的URL路 径,该路径是相对于Web应用程序上下文根的路径。

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

例如:

<servlet-mapping>

<servlet-name>helloworld</servlet-name>

<url-pattern>/hello</url-pattern>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

我们看下面的例子:

在配置了Servlet与URL样式之间的映射后,当Servlet容器接收到一个请求,它首先确定该请求应该由哪一个Web应用程序来响应。

这是通过比较请求URI的开始部分与Web应用程序的上下文路径来确定的。

映射到Servlet的路径是请求URI减去上下文的路径,Web应用程序的 Context对象在去掉请求URI的上下文路径后,将按照下面的路径映射规则的顺序对剩余部分的路径进行处理,并且在找到第一个成功的匹配后,不再进行 下一个匹配。

1、容器试着对请求的路径和Servlet映射的路径进行精确匹配,如果匹配成功,则调用这个Servlet来处理请求。

2、容器试着匹配最长的路径前缀,以斜杠(/)为路径分隔符,按照路径树逐级递减匹配,选择最长匹配的Servlet来处理请求。

3、如果请求的URL路径最后有扩展名,如.jsp,Servlet容器会试着匹配处理这个扩展名的Servlet。

如果按照前面3条规则没有找到匹配的Servlet,容器会调用Web应用程序默认的Servlet来对请求进行处理,如果没有定义默认的Servlet,容器将向客户端发送HTTP 404错误信息(请求资源不存在)。

在部署描述符中,可以使用下面的语法来定义映射。

以/开始并且以 /* 结束的字符串用来映射路径,例如:

<url-pattern>/admin/*</url-pattern>

以 *. 为前缀的字符串用来映射扩展名,例如:如果没有精确匹配,那么对/admin/路径下的资源的所有请求将由映射了上述URL样式的Servlet来处理。

<url-pattern>*.do</url-pattern>

以一个单独的/指示这个Web应用程序默认的Servlet,例如:如果没有精确匹配和路径匹配,那么对具有.do扩展名的资源的请求将由映射了上述URL样式的Servlet来处理。

<url-pattern>/</url-pattern>

所有其他的字符被用于精确匹配,例如:如果对某个请求没有找到匹配的Servlet,那么将使用Web应用程序的默认Servlet来处理。

<url-pattern>/login</url-pattern>

下面我们看几个请求映射的例子,如表3-2和表3-3所示。如果请求/login,那么将由映射了URL样式/login的Servlet来处理。

表3-2 Servlet映射

映射的 URL 对应的Servlet
/hello servlet1
/bbs/admin/* servlet2
/bbs/* servlet3
*.jsp servlet4
/ servlet5

表3-3 实际请求映射的结果

去掉上下文路径的剩余路径 处理请求的Servlet
/hello servlet1
/bbs/admin/login servlet2
/bbs/admin/index.jsp servlet2
/bbs/display servlet3
/bbs/index.jsp servlet3
/bbs servlet3
/index.jsp servler4
/hello/index.jsp servlet4
/hello/index.html servlet5
/news servlet5

Tomcat在%CATALINA_HOME%\conf\web.xml文件中配置了默认的Servlet,配置代码如下:

<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>listings</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

%CATALINA_HOME%\conf\web.xml文件中的配置将被运行在同一个Tomcat实例中的所有Web应用程序所共享。

J2ee入门:servlet-mapping的映射配置的更多相关文章

  1. atitit. orm mapping cfg 映射配置(3)-------hbnt one2maney cfg

    atitit. orm mapping cfg  映射配置(3)-------hbnt one2maney  cfg 1. 建立list 1 2. 配置xml 1 3. Hibernate中Set和L ...

  2. elasticsearch中的mapping映射配置与查询典型案例

    elasticsearch中的mapping映射配置与查询典型案例 elasticsearch中的mapping映射配置示例比如要搭建个中文新闻信息的搜索引擎,新闻有"标题".&q ...

  3. Servlet学习笔记(二)之Servlet路径映射配置、Servlet接口、ServletConfig、ServletContext

    Servlet路径映射配置 要使Servlet对象正常的运行,需要进行适当的配置,以告诉Web容器哪个请求调用哪个Servlet对象处理,对Servlet起到一个注册的作用.Servlet的配置信息包 ...

  4. HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象

    1 HTTP协议特点   1)客户端->服务端(请求request)有三部份     a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...

  5. Hibernate框架 主配置文件(Hibernate.cfg.xml) 映射配置 说明

    Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final\project ...

  6. servlet(二):Servlet的web.xml配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  7. spring mvc 资源映射配置

    在springmvc配置文件中添加 <mvc:resources location="/css/" mapping="/css/**"/> < ...

  8. Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明

    1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...

  9. Tomcat6.0下的jsp、servlet和javabean的配置

    第一步:下载jdk和tomcat: 第二步:安装和配置你的jdk和tomcat:执行jdk和tomcat的安装程序,然后设置按照路径进行安装即可.1.安装jdk以后,需要配置一下环境变量,在我的电脑- ...

随机推荐

  1. 【Unity与23种设计模式】适配器模式(Adapter)

    GoF中定义: "将一个类的接口转换成为客户端期待的类接口.适配器模式让原本接口不兼容的类能一起合作." 适配器模式与装饰模式有一定的相似之处 两者都是在着手解决C#不能多继承的问 ...

  2. 快递查询 C#

    //电商ID private string EBusinessID = "1257164"; //电商加密私钥,快递鸟提供,注意保管,不要泄漏 private string App ...

  3. CMake基本语法

    CMake简介 CMake 是做什么的? CMake是一套类似于automake的跨平台辅助项目编译的工具. 我觉得语法更加简单易用. CMake的工作流程 CMake处理顶级目录的CMakeList ...

  4. redis分片和哨兵

    1 Redis的使用 1.1 Redis入门案例 1.1.1 什么样的数据使用缓存 说明:使用缓存其实为了减少用户查询数据库的时间.如果数据频繁的变更.不适用缓存.缓存中的数据应该保存修改频率不高的数 ...

  5. Python 3 中生成器函数yield表达式的使用

    生成器函数或生成器方法中包含了一个yield表达式.调用生成器函数时,会返回一个迭代子,值从迭代子中每次提取一个(通过调用其__next__()方法).每次调用__next__()时,生成器函数的yi ...

  6. POJ-1256 next_permutation函数应用

    字典序列: 在字典序中蕴含着一个点,就是大小的问题,谁先出现,谁后出现的问题.譬如a<b<c,出现顺序就是a,b,c. 本题中字符集是所有大小写字母,而题目中规定的谁大谁小已经不是按asc ...

  7. Dockerfile 指令 VOLUME 介绍

    在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数 ...

  8. Myeclipse快速补充返回值快捷键

    比如 image.getGraphics(); 按ALT+Shift+L键,弹出一个确认变量名称框,确认之后会补全语句Graphics graphics = image.getGraphics();

  9. Hibernate学习(2)- hibernate.cfg.xml详解

    1:主配置文件主要分为三部分: 注意:通常情况下,一个session-factory节点代表一个数据库: 1.1:第一部分 数据库连接部分,注意"hibernate.connection.d ...

  10. Lucene教程 -------(一、初始Lucene)

    一.lucene的介绍 lucene是一个全文检索的框架,apache组织提供了一个用java实现的全文检索的开源项目.功能非常的强大,api非常简单,并且有了全文检索的功能支持可以非常方便的实现根据 ...