zoukankan      html  css  js  c++  java
  • 9.15JavaWeb之Servlet虚拟路径匹配规则

    9.15JavaWeb之Servlet虚拟路径匹配规则

    虚拟路径匹配规则简介

    特点:

    • Servlet 容器接收到请求后,容器会将请求的 URL 减去当前应用的上下文路径,使用剩余的字符串作为映射 URL 与 Servelt 虚拟路径进行匹配

    举例:

    URL 为http://localhost:8080/servletDemo/myServlet,其应用上下文是 servletDemo,容器会将http://localhost:8080/servletDemo去掉,使用剩余的/myServlet与 Servlet 虚拟路径进行匹配

    匹配规则

    匹配规则使用规则虚拟路径可访问的URL
    完全路径匹配 (精确匹配) /开始,不能包含通配符*。 必须完全匹配 /myServlet /user/myServlet /product/index.action http://localhost:8080/servletDemo/myServlet http://localhost:8080/servletDemo/user/myServlet http://localhost:8080/servletDemo/product/index.action
    目录匹配 /字符开头,并以/*结尾的字符串。 用于路径匹配 /user/* /* http://localhost:8080/servletDemo/user/aaa http://localhost:8080/servletDemo/aa
    扩展名匹配 以通配符*.开头的字符串。 用于扩展名匹配 *.do *.action *.jsp http://localhost:8080/servletDemo/user.do http://localhost:8080/servletDemo/myServlet.action http://localhost:8080/servletDemo/bb.jsp
    缺省匹配(默认匹配) 映射路径为/,表示这个 Servlet 为当前应用的缺省 Servlet 或默认 Servlet,默认处理无法匹配到虚拟路径的请求。 / 可以匹配任意请求 URL

    注意:

    目录匹配和扩展名匹配无法混合使用,即/rest/*.do这种写法是不正确的。

    匹配优先级

    虚拟路径匹配优先级顺序为:

    全路径匹配(精确匹配)> 目录匹配 > 扩展名匹配 > 缺省匹配(默认匹配)

    特点 :

    Servlet 容器会从优先级高的虚拟路径开始匹配,匹配成功后就会立刻将请求交给相应的 Servlet 进行处理,不会再关注其他虚拟路径是否匹配成功。

    跳过Servlet类直接看web.xml的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
       id="WebApp_ID" metadata-complete="false" version="4.0">
       <servlet>
           <servlet-name>MyServlet1</servlet-name>
           <servlet-class>net.biancheng.www.MyServletDemoNo7</servlet-class>
       </servlet>
       <servlet>
           <servlet-name>MyServlet2</servlet-name>
           <servlet-class>net.biancheng.www.MyServletDemoNo7</servlet-class>
       </servlet>
       <servlet>
           <servlet-name>MyServlet3</servlet-name>
           <servlet-class>net.biancheng.www.MyServletDemoNo7</servlet-class>
       </servlet>
       <servlet>
           <servlet-name>MyServlet4</servlet-name>
           <servlet-class>net.biancheng.www.MyServletDemoNo7</servlet-class>
       </servlet>
       <servlet>
           <servlet-name>MyServlet5</servlet-name>
           <servlet-class>net.biancheng.www.MyServletDemoNo7</servlet-class>
       </servlet>
       <!-- 完全路径匹配 -->
       <servlet-mapping>
           <servlet-name>MyServlet1</servlet-name>
           <url-pattern>/hello</url-pattern>
       </servlet-mapping>
       <!-- 目录匹配 -->
       <servlet-mapping>
           <servlet-name>MyServlet2</servlet-name>
           <url-pattern>/abc/my/*</url-pattern>
       </servlet-mapping>
       <!-- 目录匹配 -->
       <servlet-mapping>
           <servlet-name>MyServlet3</servlet-name>
           <url-pattern>/abc/*</url-pattern>
       </servlet-mapping>
       <!-- 扩展名匹配 -->
       <servlet-mapping>
           <servlet-name>MyServlet4</servlet-name>
           <url-pattern>*.do</url-pattern>
       </servlet-mapping>
       <!--缺省匹配 -->
       <servlet-mapping>
           <servlet-name>MyServlet5</servlet-name>
           <url-pattern>/</url-pattern>
       </servlet-mapping>
    </web-app>

    Tomcat中缺省Servlet

    Tomcat 安装目录的 confweb.xml 文件中,注册了一个名称为 org.apache.catalina.servlets.DefaultServlet 的 Servlet,并将它设置为缺省 Servlet

    作用:

    • Tomcat 服务器中的 Web 应用没有缺省 Servlet 时,会将 DefaultServlet 作为其缺省 Servlet。

    • 客户端访问 Tomcat 服务器中某个静态 HTML 文件或者图片时,DefaultServlet 会判断该 HTML 或图片是否存在

      • 若存在,则将数据以流的形式返回客户端

      • 否则会报告 404 错误。

    It's a lonely road!!!
  • 相关阅读:
    ural(Timus) 1019 Line Painting
    ACMICPC Live Archive 2031 Dance Dance Revolution
    poj 3321 Apple Tree
    其他OJ 树型DP 选课
    poj 3548 Restoring the digits
    ACMICPC Live Archive 3031 Cable TV Network
    递归循环获取指定节点下面的所有子节点
    手动触发asp.net页面验证控件事件
    子级Repeater获取父级Repeater绑定项的值
    没有列名的数据绑定
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15308428.html
Copyright © 2011-2022 走看看