1.  先来上段常见的代码

 1     <!-- MVC Servlet -->
 2     <servlet>
 3         <servlet-name>springServlet</servlet-name>
 4         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 5         <init-param>
 6             <param-name>contextConfigLocation</param-name>
 7             <param-value>classpath*:/spring-mvc*.xml</param-value>
 8         </init-param>
 9         <load-on-startup>1</load-on-startup>
10     </servlet>
11     <servlet-mapping>
12         <servlet-name>springServlet</servlet-name>
13         <url-pattern>/</url-pattern>
14     </servlet-mapping>
15
16     <filter>
17         <filter-name>encodingFilter</filter-name>
18         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
19         <init-param>
20             <param-name>encoding</param-name>
21             <param-value>UTF-8</param-value>
22         </init-param>
23         <init-param>
24             <param-name>forceEncoding</param-name>
25             <param-value>true</param-value>
26         </init-param>
27     </filter>
28     <filter-mapping>
29         <filter-name>encodingFilter</filter-name>
30         <url-pattern>/*</url-pattern>
31     </filter-mapping>

正所谓mvc配置千篇一律,不过这个<url-pattern>/</url-pattern> 跟 <url-pattern>/*</url-pattern> 概念还是有点模糊。

2.  两者的解释

2.1  <url-pattern>/</url-pattern>

会匹配到/login这样的路径型的url,不会匹配到模式为*.jsp这样的后缀型url,言外之意就是不拦截jsp文件。

故经过视图解析器后返回jsp视图时不会再进入DispatcherServlet。

说到为什么JSP页面的请求并不会命中这个Servlet,那是因为servlet容器内建的JSP Servlet将会被调用,而这个容器内建的JSP Servlet已经默认地映射在了*.jsp上。但还是能拦截到静态资源,如*.js,*.css。

2.2  <url-pattern>/*</url-pattern>

会匹配所有的url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)。

故经过视图解析器后返回jsp视图时会再进入DispatcherServlet,导致找不到对应的controller所以报404错。

No mapping found for HTTP request with URI [/Shiro-Spring/WEB-INF/jsp/login.jsp] in DispatcherServlet with name ‘springmvc’

3.  /和/*的区别总结

先说一种问题,假设你方法请求后想返回index.jsp界面:return "index";

如果配置成< url-pattern > /* </ url-pattern >这样,即使你配置了如下这些同样会报错。

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" />
</bean>

错误提示:

org.springframework.web.servlet.DispatcherServlet noHandlerFound警告: No mapping found for HTTP request with URI [/myspring/WEB-INF/jsp/index.jsp] in DispatcherServlet with name ‘spring’ 错误,也就是找不到 index.jsp 

通过这种错误配置再来看一下两者区别吧:

< 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等)

转载于:https://www.cnblogs.com/niceyoo/p/8764584.html

springmvc.xml 中 url-pattern/url-pattern节点详解相关推荐

  1. 在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码

    在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码 <mvc:annotation-driven><!-- 消息转换器 --><mv ...

  2. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  3. 新手必看:访问url到加载全过程详解(看完不会我吃shi)

    新手必看:访问url到加载全过程详解(看完不会我吃shi) 1.放在前面:新手必须知道的那些概念 1.1 什么是IP.域名.主机名.url.服务器 1.2 http & https 1.3 O ...

  4. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    标签:读写分离 页面缓存 URL重写 Nginx 反向代理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.bl ...

  5. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解【转载】

    本文只为备份,以防失效.原文请看https://blog.51cto.com/freeloda/1288553 补充说明:部分图片为测试图片,未完全复制,参考文字描述即可. Nginx 反向代理.负载 ...

  6. Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  7. Java 11中的新功能和API详解系列1

    Java 11中的新功能和API详解系列1 2018.9.27 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. JDK 11在语言语法方面有一个小改动,增加了相当数量的新API,以及 ...

  8. 【夯实Spring Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  9. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  10. python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

最新文章

  1. TIOBE 1月编程语言排行榜:C语言再度「C 位」出道,Python惜败
  2. Error in install.packages : cannot remove prior installation of package
  3. 无需用户输入!Adobe提出自动生成高质量合成图像新方法
  4. JRebel for Android 编译神器
  5. Python 技术篇-文件操控:文件的移动和复制
  6. 将BLOG作为输入平台 ……
  7. 如何通俗理解拉格朗日对偶问题(part1)
  8. 算法:合并排序(Merge Sort)
  9. java string 内存写了_Java String的内存机制
  10. 嵌入式实时操作系统Ucos3
  11. 在Ubuntu中部署并测试Fabric 1.0 Beta
  12. 程序员应当注意的肢体语言
  13. 9款主流图表控件轻松实现数据可视化
  14. Tomcat 9安装配置教程
  15. 公众号下面显示一排服务器,新技能get 微信公众号文章花式排版大法
  16. 基于HTML的旋转立方体的实现
  17. DeFi之道丨告别朝九晚五,一文了解区块链新组织形式DO
  18. java net php_atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php...
  19. 1.ISIS基本理论
  20. ERP系统有哪些品牌?哪个品牌值得推荐?

热门文章

  1. java分哪几部分_JVM 是由哪几部分组成的?
  2. java sessionmanager_java.lang.IllegalStateException:没有SessionManager
  3. 作业帮电脑版在线使用_在线K12赛道六虎争霸:猿辅导、作业帮又宣布新一轮融资...
  4. python tushare获取股票数据并可视化_荐Python获取股票数据及其可视化--基于tushare库...
  5. 2019年有三AI“春季”划,给我一个荣耀,还你一生荣耀
  6. 【资源放送】机器学习/深度学习最全公开视频大放送!
  7. 亚马逊封号潮下,卖家们凭借这么做实现自救?速卖通和Lazada成为首选
  8. 在MFC中创建动态控件的生成与响应
  9. [BOI2019][第K大问题][暴力剪枝]D2T1 Olympiads
  10. 1. CMake 系列 - 从零构建动态库和静态库