web.xml中 /和/*的区别

本文探讨了Spring MVC中DispatcherServlet的两种不同URL映射方式(/与/*)的工作原理及区别。解释了如何正确配置URL模式以避免404错误,并确保视图正确加载。

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

< url-pattern > / </ url-pattern >   不会匹配到*.jsp,即:*.jsp不会进入spring的 DispatcherServlet类 。
< url-pattern > /* </ url-pattern > 会匹配*.jsp,会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。 

总之,关于web.xml的url映射的小知识:
< url-pattern>/</url-pattern>  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
< url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)

 

 

1. 首先/这个是表示默认的路径,及表示:当没有找到可以匹配的URL就用这个URL去匹配。
2. 在springmvc中可以配置多个DispatcherServlet,比如: 配置多个DispatcherServlet有/和/*,先匹配的是/*这个

3. 当配置相同的情况下,DispathcherServlet配置成/和/*的区别
<一>/:使用/配置路径,直接访问到jsp,不经springDispatcherServlet
<二> /*:配置/*路径,不能访问到多视图的jsp

当我在客户端调用URL:/user/list然后返回user.jsp视图,当配置的是/:DispathcherServlet拿到这个请求然后返回对应的controller,
然后依据Dispather Type为Forward类型转发到user.jsp视图,即就是请求user.jsp视图(/user/user.jsp),此时Dispather没有拦截/user/user.jsp,
因为此时你配置的是默认的/,就顺利的交给ModleAndView去处理显示了。
当配置的是/*:DispathcherServlet拿到这个请求然后返回对应的controller,然后通过Dispather Type通过Forward转发到user.jsp视图,
即就是请求user.jsp视图(/user/user.jsp),此时Dispather已经拦截/user/user.jsp,Dispatcher会把他当作Controller去匹配,没有匹配到就会报404错误。

结论:在配置视图的时候尽量用/这种方式。
<think>好的,用户想了解Servlet中的注解列表及用法,以及注解与web.xml的配合使用方法。首先,我需要回顾一下Servlet相关的注解,特别是常用的几个,比如@WebServlet,@WebInitParam,@WebListener,@WebFilter等。用户可能想知道这些注解的具体参数用法,以及它们如何替代或与web.xml配置结合使用。 首先,要列出Servlet中常用的注解,并解释每个注解的作用参数。例如,@WebServlet用于定义Servlet的访问路径初始化参数,需要说明urlPatterns、name、initParams等属性的用法。然后,可能需要给出代码示例,展示如何用注解配置一个Servlet,这样用户更直观。 接下来,用户提到注解与web.xml的配合使用。这里需要注意,当同时使用注解web.xml配置同一个Servlet时,容器如何处理。根据Servlet规范,如果存在web.xml的配置,它会覆盖注解中的设置。需要解释这种覆盖规则,并举例说明,比如在web.xml中设置不同的url-pattern会替换注解中的值。 然后,用户可能想知道如何混合使用两种配置方式。例如,部分Servlet用注解,部分用web.xml,或者在一个应用中同时使用的情况。需要说明两者可以共存,但要注意避免冲突,比如重复映射同一路径。 另外,可能需要提到一些注意事项,比如Servlet 3.0及以上版本支持注解,而旧版本需要依赖web.xml。还有部署描述符的metadata-complete属性,当设置为true时,容器会忽略注解,这时必须使用web.xml配置。 还需要检查提供的引用内容,确保回答符合引用中的信息。例如,引用[1]提到使用WebServlet注解web.xml配置的区别及注意事项,引用[2][3]给出了具体的配置示例,可能需要引用这些来说明覆盖情况。 最后,生成相关问题,帮助用户深入理解,比如注解的优势,版本兼容性问题,配置覆盖的优先级,以及如何选择配置方式等。确保问题覆盖用户可能感兴趣的扩展内容。 总结步骤: 1. 列举Servlet常用注解及其参数用法。 2. 提供注解配置的代码示例。 3. 解释注解与web.xml的配合使用,特别是覆盖规则。 4. 混合配置的注意事项。 5. 注意事项,如版本支持、metadata-complete属性。 6. 生成相关问题,引导进一步学习。</think>### Servlet注解与web.xml配置详解 #### 一、Servlet常用注解列表及用法 1. **@WebServlet** 定义Servlet的访问路径初始化参数,支持以下属性: ```java @WebServlet( name = "demoServlet", //Servlet名称(可选) urlPatterns = {"/demo", "/test"}, //URL映射路径(必填) initParams = { @WebInitParam(name = "encoding", value = "UTF-8") }, //初始化参数 loadOnStartup = 1 //启动优先级 ) ``` 等价于web.xml中的: ```xml <servlet> <servlet-name>demoServlet</servlet-name> <servlet-class>com.example.DemoServlet</servlet-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>demoServlet</servlet-name> <url-pattern>/demo</url-pattern> <url-pattern>/test</url-pattern> </servlet-mapping> ``` 2. **@WebFilter** 定义过滤器,可指定拦截路径: ```java @WebFilter( filterName = "logFilter", urlPatterns = "/*", initParams = @WebInitParam(name = "logLevel", value = "DEBUG") ) ``` 3. **@WebListener** 声明事件监听器: ```java @WebListener public class SessionListener implements HttpSessionListener {...} ``` #### 二、注解与web.xml配合规则 1. **覆盖原则** 当同一个Servlet同时通过注解web.xml配置时: - `web.xml`的`<servlet-class>`会覆盖注解中的类声明 - `web.xml`的`<url-pattern>`会替换注解的`urlPatterns`[^1] ```xml <!-- web.xml配置将覆盖注解 --> <servlet> <servlet-name>overrideDemo</servlet-name> <servlet-class>com.example.NewServlet</servlet-class> <url-pattern>/newpath</url-pattern> </servlet> ``` 2. **混合配置场景** - 基础配置(如数据库连接池)建议使用web.xml - 业务层Servlet推荐使用注解 - 可通过`metadata-complete="true"`强制禁用注解[^3] ```xml <!-- web.xml头部声明 --> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" metadata-complete="true"> ``` #### 三、开发建议 1. **版本适配** | 特性 | Servlet 3.0+ | Servlet 2.5 | |---|---|----| | 注解支持 | ✔️ | 需web.xml | | 动态注册 | ✔️ | ✖️ | 2. **路径冲突检测** 使用工具检查重复映射: ```bash mvn clean install -DcheckMapping=true ``` ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值