1.  先来上段常见的代码

     <!-- MVC Servlet -->
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-mvc*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</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等)

springmvc.xml 中 <url-pattern></url-pattern>节点详解的更多相关文章

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

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

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

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

  3. apache url rewrite 的RewriteRule参数详解

    apache url rewrite 的RewriteRule参数详解 我们经常会在apache那边对一些url进行一些重写操作,那么就会涉及到很多的重写策略的选择,比如重定向的方式,参数的处理,规则 ...

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

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

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

    原文:http://blog.51cto.com/freeloda/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Ng ...

  6. 新浪sae url rewrite(伪静态、重定向)详解

    新浪sae url rewrite(伪静态.重定向)详解 http://www.veryhuo.com phpclubs 2011-11-14 投递稿件 sae全程Sina App Engine,真是 ...

  7. CSS中的ul与li样式详解

    CSS中的ul与li样式详解ul和li列表是使用CSS布局页面时常用的元素.在CSS中,有专门控制列表表现的属性,常用的有list-style-type属性.list-style-image属性.li ...

  8. Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  9. 在ASP.NET 5应用程序中的跨域请求功能详解

    在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...

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

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

随机推荐

  1. 带你Python入门,踏进人工智能领域

    1.Python能做什么? 不知大家 没有看<中国好声音>呢?有位选择就是利用AI改编了一首周杰伦的歌<止战之殇>. Python适合做人工智能AI吗? 很明确的告诉你,可以! ...

  2. mysql update ...select的使用 & update 遇到 disable safe 的解决方法

    use `testdb`; update dtable d INNER JOIN new_table n ON d.details = n.details set d.email = n.email, ...

  3. GUI编程及文件对话框的使用

    import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import ...

  4. [elk]kafka集群

    kafka高可用 并发写 每一个分区都是一个顺序的.不可变的消息队列, 并且可以持续的添加.分区中的消息都被分了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的. 并发读 数据 ...

  5. 在生成一个窗体的时候,点击窗体的右上角关闭按钮激发窗体事件的方法:窗体Frame为事件源,WindowsListener接口调用Windowsclosing()。

    事件模式的实现步骤: 开发事件对象(事件发送者)——接口——接口实现类——设置监听对象 一定要理解透彻Gril.java程序.   重点:学会处理对一个事件源有多个事件的监听器(在发送消息时监听器收到 ...

  6. linux 测试网络url命令

    1.curl 地址 或者 wget url地址 [hxxxx@iZ23vy2msooZ ~]$ curl www.baidu.com<!DOCTYPE html><!--STATUS ...

  7. BAT面试上机题从3亿个ip中找出访问次数最多的IP详解

    我们面临的问题有以下两点:1)数据量太大,无法在短时间内解决:2)内存不够,没办法装下那么多的数据.而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率:2)针对空间,就是 ...

  8. 微信小程序中同步 异步的使用

    https://www.jianshu.com/p/e92c7495da76   微信小程序中使用Promise进行异步流程处理 https://www.cnblogs.com/cckui/p/102 ...

  9. Thread类的join()方法

    public class Demo { /** * Thread类的join()方法 * -------------------------------- * 1)join() * 2)join(lo ...

  10. numpy学习之创建数组

    1.使用array函数创建数组 import numpy as np ndarray1 = np.array([1, 2, 3]) array([1, 2, 3]) ndarray2 = np.arr ...