zoukankan      html  css  js  c++  java
  • 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>
    

    访问结果:

  • 相关阅读:
    iOS 获取内外网ip
    iOS 查看层级关系以及调用堆栈
    CoreML Use of undeclared type & Use of unresolved identifier
    AFN的实时网络监控 但是block连续调用了两次
    iOS 11 偏好设置(NSUserDefaults)无效了?
    iOS 11 UIScrollView的新特性(automaticallyAdjustsScrollViewInsets 不起作用了)
    Xcode9~iOS11初体验 无线调试
    Hook~iOS用钩子实现代码注入(埋点方案)
    tomcat启动时端口占用的问题怎么解决
    Memcached在Linux环境下的使用详解http://blog.51cto.com/soysauce93/1737161
  • 原文地址:https://www.cnblogs.com/sunyubin/p/9664623.html
Copyright © 2011-2022 走看看