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>

访问结果:

 

转载于:https://www.cnblogs.com/sunyubin/p/9664623.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值