导读:本期聚焦于小伙伴创作的《Java Web中web.xml的servlet-mapping如何配置URL路径映射规则》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java Web中web.xml的servlet-mapping如何配置URL路径映射规则》有用,将其分享出去将是对创作者最好的鼓励。

在Java Web应用的web.xml部署描述文件中,servlet-mapping元素用于将Servlet实例和特定的URL访问路径绑定,只有配置正确的映射规则,客户端才能通过对应的URL访问到对应的Servlet处理逻辑。

Java Web中web.xml的servlet-mapping如何配置URL路径映射规则

servlet-mapping的基本结构

servlet-mapping的配置需要包含两个核心子元素,分别是servlet-nameurl-patternservlet-name需要和之前定义的servlet元素中的servlet-name保持一致,url-pattern则是具体的URL映射规则。基本配置示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 定义Servlet -->
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.example.TestServlet</servlet-class>
    </servlet>
    <!-- 配置Servlet映射 -->
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

URL路径映射的三种匹配规则

1. 精确匹配

精确匹配是最常用的匹配方式,url-pattern配置为具体的路径字符串,只有当客户端请求的URL和配置的路径完全一致时,才会匹配到对应的Servlet。例如配置/test,那么只有访问http://localhost:8080/项目名/test时才会触发该Servlet,访问/test/abc或者/test.do都不会匹配。

2. 路径匹配

路径匹配使用通配符*表示匹配任意路径,配置格式为/开头+*结尾,例如/user/*。这种规则会匹配所有以/user/开头的URL请求,比如/user/list/user/info/1都可以匹配到对应的Servlet。需要注意的是,*只能放在路径的末尾,不能写成/*.do这种格式,否则会被识别为扩展名匹配之外的错误格式。

3. 扩展名匹配

扩展名匹配用于匹配指定后缀的请求,配置格式为*.扩展名,例如*.do。这种规则会匹配所有以.do结尾的URL请求,不管前面的路径是什么,比如/user/list.do/order/save.do都会匹配到对应的Servlet。扩展名匹配不能和路径匹配混合使用,比如/user/*.do是不合法的配置。

匹配规则的优先级顺序

当客户端请求的URL同时满足多种匹配规则时,会按照以下优先级从高到低进行匹配:

  1. 精确匹配的优先级最高,只要存在完全匹配的url-pattern,就会直接使用该映射
  2. 路径匹配的优先级次之,如果有多个路径匹配符合,会匹配路径更长的那个,比如/user/*/*优先级更高
  3. 扩展名匹配的优先级最低,只要存在符合的扩展名匹配,就会使用该映射
  4. 如果以上规则都不匹配,容器会尝试查找对应的静态资源,找不到则返回404错误

特殊映射规则说明

有一个特殊的url-pattern配置为/,它会匹配所有未被其他规则匹配的请求,包括静态资源请求,通常被用作前端控制器的映射,比如Spring MVC的DispatcherServlet就常用这个配置。如果配置为/*,则会匹配所有请求,包括JSP页面的请求,一般不建议这样配置,否则会导致JSP无法正常渲染。

实际配置示例

以下是一个包含多种映射规则的完整web.xml配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 精确匹配Servlet -->
    <servlet>
        <servlet-name>ExactServlet</servlet-name>
        <servlet-class>com.example.ExactServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ExactServlet</servlet-name>
        <url-pattern>/exact</url-pattern>
    </servlet-mapping>

    <!-- 路径匹配Servlet -->
    <servlet>
        <servlet-name>PathServlet</servlet-name>
        <servlet-class>com.example.PathServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>PathServlet</servlet-name>
        <url-pattern>/path/*</url-pattern>
    </servlet-mapping>

    <!-- 扩展名匹配Servlet -->
    <servlet>
        <servlet-name>ExtServlet</servlet-name>
        <servlet-class>com.example.ExtServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ExtServlet</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
</web-app>

对应的Servlet处理逻辑示例:

package com.example;

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 ExactServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("精确匹配Servlet被访问");
    }
}

servlet-mappingweb.xmlURL路径映射Java_Web修改时间:2026-06-23 03:15:35

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。