springmvc.xml 中 url-pattern/url-pattern节点详解
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节点详解相关推荐
- 在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码
在 springmvc.xml 中配置消息转换器处理 ResponseBody 中文乱码 <mvc:annotation-driven><!-- 消息转换器 --><mv ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- 新手必看:访问url到加载全过程详解(看完不会我吃shi)
新手必看:访问url到加载全过程详解(看完不会我吃shi) 1.放在前面:新手必须知道的那些概念 1.1 什么是IP.域名.主机名.url.服务器 1.2 http & https 1.3 O ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
标签:读写分离 页面缓存 URL重写 Nginx 反向代理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeloda.bl ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解【转载】
本文只为备份,以防失效.原文请看https://blog.51cto.com/freeloda/1288553 补充说明:部分图片为测试图片,未完全复制,参考文字描述即可. Nginx 反向代理.负载 ...
- Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- Java 11中的新功能和API详解系列1
Java 11中的新功能和API详解系列1 2018.9.27 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. JDK 11在语言语法方面有一个小改动,增加了相当数量的新API,以及 ...
- 【夯实Spring Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)
本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...
- Java6.0中Comparable接口与Comparator接口详解
Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...
- python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...
最新文章
- TIOBE 1月编程语言排行榜:C语言再度「C 位」出道,Python惜败
- Error in install.packages : cannot remove prior installation of package
- 无需用户输入!Adobe提出自动生成高质量合成图像新方法
- JRebel for Android 编译神器
- Python 技术篇-文件操控:文件的移动和复制
- 将BLOG作为输入平台 ……
- 如何通俗理解拉格朗日对偶问题(part1)
- 算法:合并排序(Merge Sort)
- java string 内存写了_Java String的内存机制
- 嵌入式实时操作系统Ucos3
- 在Ubuntu中部署并测试Fabric 1.0 Beta
- 程序员应当注意的肢体语言
- 9款主流图表控件轻松实现数据可视化
- Tomcat 9安装配置教程
- 公众号下面显示一排服务器,新技能get 微信公众号文章花式排版大法
- 基于HTML的旋转立方体的实现
- DeFi之道丨告别朝九晚五,一文了解区块链新组织形式DO
- java net php_atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php...
- 1.ISIS基本理论
- ERP系统有哪些品牌?哪个品牌值得推荐?
热门文章
- java分哪几部分_JVM 是由哪几部分组成的?
- java sessionmanager_java.lang.IllegalStateException:没有SessionManager
- 作业帮电脑版在线使用_在线K12赛道六虎争霸:猿辅导、作业帮又宣布新一轮融资...
- python tushare获取股票数据并可视化_荐Python获取股票数据及其可视化--基于tushare库...
- 2019年有三AI“春季”划,给我一个荣耀,还你一生荣耀
- 【资源放送】机器学习/深度学习最全公开视频大放送!
- 亚马逊封号潮下,卖家们凭借这么做实现自救?速卖通和Lazada成为首选
- 在MFC中创建动态控件的生成与响应
- [BOI2019][第K大问题][暴力剪枝]D2T1 Olympiads
- 1. CMake 系列 - 从零构建动态库和静态库