• servlet路径映射中的完全路径匹配、目录匹配、扩展名匹配


    在servlet路径映射中,关于url-pattern的配置有三种,分别是完全路径匹配、目录匹配、扩展名匹配

    其优先级分别为:完全路径匹配>目录匹配>扩展名匹配;

    一、三种路径印射的区别

    在服务器段的java代码是:

    package servlet0917;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class servlet01 extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("doget方法被调用");
        }
    }
    

     1、完全路径代码:

    <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/servlet/servlet01</url-pattern>
        </servlet-mapping>
        
    

    访问结果:

       

    访问路径:http://localhost:8080/servlet/servlet01

    这种模式也叫完全模式匹配。

    2、目录匹配也叫通配符匹配

    (1、)web端代码:

        <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/servlet/*</url-pattern>
        </servlet-mapping>
    

     访问路径可以有多个选择:如下图

     

    当servlet中的路径映射为<url-pattern>/servlet/*</url-pattern>,从字面意思也可以理解出servlet后面跟的是一个整目录,目录可以随意访问的。

    (2)既url路径中直接是/*

        <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>

    其访问路径没有限制,访问路径可以是任何字符与数字,这里就不向大家一一展示了。

    3、后缀名匹配,不能以/开头,要以*开头,比如 *.do

    web端代码:

        <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    

     在访问路径时,其*可以换成任何字符与数字:如下图所示

     二:印射路之间的优先级

    先定义两个servlet文件,如图所示,这里就不像大家展示其代码了

    1、web端代码:比较/abc/*与/*的优先级,结论:如果同样目录匹配,限定范围越紧准,越先被匹配

     <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/abc/*</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>servlet02</servlet-name>
            <servlet-class>servlet0917.servlet02</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet02</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    

    2、端口代码:/abc/*与/abc比较,先被访问的是完全路径匹配,其次才是目录匹配(ps:目录匹配大多都带有*)

    <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/abc/*</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>servlet02</servlet-name>
            <servlet-class>servlet0917.servlet02</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet02</servlet-name>
            <url-pattern>/abc</url-pattern>
        </servlet-mapping>
    

     访问结果:

    3、用目录路径/abc/*与扩展名*.do访问,结果是目录路径先被访问

    <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/abc/*</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>servlet02</servlet-name>
            <servlet-class>servlet0917.servlet02</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet02</servlet-name>
            <url-pattern>*.do</url-pattern>d
        </servlet-mapping>
    

     访问结果:

    4、web端代码:/*与*.do,先被访问的还是目录路径,

    <servlet>
            <servlet-name>servlet01</servlet-name>
            <servlet-class>servlet0917.servlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>servlet02</servlet-name>
            <servlet-class>servlet0917.servlet02</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>servlet02</servlet-name>
            <url-pattern>*.do</url-pattern>d
        </servlet-mapping>
    

    访问结果:

  • 相关阅读:
    JQuery官方学习资料(译):Utility方法
    JQuery官方学习资料(译):Data方法
    JQuery官方学习资料(译):CSS
    JQuery官方学习资料(译):遍历
    JQuery官方学习资料(译):JQuery对象
    JQuery官方学习资料(译):操作元素
    JQuery官方学习资料(译):选择器的运作
    JQuery官方学习资料(译):选择元素
    JQuery官方学习资料(译):Attributes
    centos7安装 yum安装nginx找不到package
  • 原文地址:https://www.cnblogs.com/sunyubin/p/9664623.html
Copyright © 2020-2023  润新知