Servlet Url Mapping

本文详细介绍了Web应用中URL映射的处理流程,包括精确匹配、通配符匹配、后缀名匹配及默认匹配等规则,并展示了不同URL路径的匹配过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RequestURI Compisition:


http://localhost:8080/testWeb/foo/bar/index.html


contextPath:/testWeb

servletPath:/foo/bar

pathInfo:/index.html


http://localhost:8080/testWeb/catalog/index.bop


contextPath:/testWeb

servletPath:/catalog/index.bop

pathInfo:null


General Url Mapping



匹配规则:


1)精确匹配;

把精确的path排在第一,首先进行精确匹配;


2)地址通配符匹配;

按地址通配由长到短排列,然后逐个匹配;


3)后缀名匹配;

对请求地址进行后缀名匹配;


4default匹配;

用服务器默认的servlet来进行处理;


按匹配规则把servletcontextpath 进行排序:


/catalog --> servlet 3


/foo/bar/* --> servlet 1


/baz/* --> servlet 2


*.bop --> servlet 4



UrlMapping

Servletpath

acceptLeft

Requesturi

/catalog

/catalog

False

/catalog

/foo/bar/*

/foo/bar

True

/foo/bar/index.html

/foo/bar/index.bop

/baz/*

/baz

True

/baz

/baz/index.html

*.bop

*.bop

false

/catalog/reacecar.bop

/index.bop



Special Url Mapping


URLMapping

Servletpath

PathInfo

AcceptLeft

RequestUri

/

/foo/bar

Null

false

/foo/bar/index

/*

empty

/foo/bar/index

true

/foo/bar/index


Astring containing only the /characterindicates the "default" servlet of the application. In thiscase the servlet path is the request URI minus the context path andthe path info is null.



Reference:

http://read.pudn.com/downloads152/ebook/665536/servlet2.4%B9%E6%B7%B6.pdf


<think>好的,我需要回答用户关于servlet-mapping在Java Web开发中的作用的问题。首先,我需要回忆一下Servlet的相关知识,特别是web.xml配置中的servletservlet-mapping部分。根据用户提供的引用内容,尤其是引用[1]中的配置示例,servlet-mapping用来将URL模式映射到具体的Servlet类。 接下来,我应该分点说明servlet-mapping的作用,确保结构清晰。根据引用[3],Jsp也是Servlet的一种,配置时可以选择servlet-class或jsp-file,这说明servlet-mapping可以处理不同类型的资源。引用[2]提到用户在使用url-pattern时遇到的困惑,后来通过实验理解其作用,说明url-pattern的配置需要正确匹配请求路径。 还需要提到servlet-mapping的基本结构,如servlet-name必须一致,url-pattern的匹配规则,比如精确匹配、目录匹配、扩展名匹配等。引用[4]可能涉及到Servlet规范的相关内容,但具体链接无法查看,可能需要依赖已知知识补充。 另外,要强调servlet-mapping如何实现请求路由,将客户端请求分发给对应的Servlet处理,这是MVC框架的基础。同时,多个映射规则的情况需要说明优先级,比如精确匹配优先于路径匹配,路径匹配优先于扩展名匹配。 最后,根据用户提供的示例配置,可以举一个具体的例子,展示servletservlet-mapping的配置,并解释各个部分的作用,帮助用户更好地理解。需要确保回答符合中文习惯,使用正确的术语,并引用提供的参考文献。</think>在Java Web开发中,`<servlet-mapping>` 是 `web.xml` 配置文件的核心元素之一,主要用于 **建立URL请求与Servlet处理程序的映射关系**。其作用可分为以下三方面: --- ### 一、核心作用解析 1. **请求路由分配** 通过 `<url-pattern>` 定义URL匹配规则,将客户端请求定向到对应的Servlet类。 例如配置: ```xml <servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.example.UserController</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/user/*</url-pattern> </servlet-mapping> ``` 所有以 `/user/` 开头的请求(如 `/user/profile`)都会由 `UserController` 处理[^1][^3]。 2. **多路径映射支持** 一个Servlet可通过多个 `<servlet-mapping>` 绑定不同URL,实现复用: ```xml <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/api/user</url-pattern> <url-pattern>/mobile/user</url-pattern> </servlet-mapping> ``` 3. **资源类型解耦** 支持将JSP、静态资源伪装成Servlet请求。例如通过 `<jsp-file>` 映射JSP页面: ```xml <servlet> <servlet-name>HomePage</servlet-name> <jsp-file>/index.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>HomePage</servlet-name> <url-pattern>/home</url-pattern> </servlet-mapping> ``` 访问 `/home` 实际渲染 `index.jsp`。 --- ### 二、`<url-pattern>` 匹配规则 | 匹配类型 | 示例 | 优先级 | |----------------|-------------------|--------| | 精确匹配 | `/login` | 最高 | | 目录匹配 | `/admin/*` | 次高 | | 扩展名匹配 | `*.do` | 最低 | 特殊规则: - `/*` 会覆盖所有请求,包括静态资源(可能导致问题) - 空字符串配置会映射到应用根路径(不推荐) --- ### 三、实际开发中的应用场景 1. **RESTful API路由** 将 `/api/v1/orders` 映射到 `OrderServlet` 处理订单相关请求。 2. **权限过滤器链** 通过 `<url-pattern>/secure/*</url-pattern>` 对特定路径添加权限校验。 3. **旧系统兼容** 将 `.do` 结尾的旧URL映射到新Servlet实现平滑迁移[^2][^5]。 --- ### 四、常见问题示例 **问题**:配置了 `<url-pattern>/test</url-pattern>`,但访问 `/test/` 返回404。 **原因**:精确匹配要求路径完全一致,`/test/` 被视为目录匹配。需添加额外映射或使用通配符[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值