zoukankan      html  css  js  c++  java
  • J2ee入门:servlet-mapping的映射配置

    <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%confweb.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%confweb.xml文件中的配置将被运行在同一个Tomcat实例中的所有Web应用程序所共享。

  • 相关阅读:
    HDU 1525
    kmp模板
    hdu 4616 Game(树形DP)
    hdu 4619 Warm up 2(并查集活用)
    hdu 4614 Vases and Flowers(线段树加二分查找)
    Codeforces 400D Dima and Bacteria(并查集最短路)
    poj 2823 Sliding Window (单调队列)
    hdu 2196 Computer(树形dp)
    hdu 4604 Deque
    最短路径
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7095805.html
Copyright © 2011-2022 走看看