• 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应用程序所共享。

  • 相关阅读:
    C++ 函数模板&类模板详解
    C++ const修饰不同类型的用法
    C++ 引用Lib和Dll的方法总结
    C#查询本机所有打印机
    C#如何设置桌面背景
    C#使用Aspose.Words把 word转成图片
    查看IP占用
    查看IP占用
    C# Dictionary判断Key是否存在
    C# 只有小时和分钟的两个时间进行对比
  • 原文地址:https://www.cnblogs.com/lexiaofei/p/7095805.html
Copyright © 2020-2023  润新知