文档章节

配置Spring DispatcherServlet使用通配符详解

喂码呢
 喂码呢
发布于 2016/09/27 18:12
字数 565
阅读 412
收藏 1

在开始介绍Spring DispatcherServlet的通配符之前,先简单说说servlet的mapping中使用通配符

在web.xml文件中配置servlet-mapping 的url-pattern可以使用通配符(*), 但这个通配符的使用有非常严格的限制,只能用于以下两种情况:

1. *.[extension], 匹配扩展名请求, 如:/product/*.do;

2. 以“/”开头并以“/*”结束,如:/product/*;

 

一个Servlet在web.xml中可以配置多个servlet-mapping,这也就意味着多个servlet-mapping之间可能有冲突 ,所以各种mapping规则之间的优先级也是需要在配置的时候考虑的,优先匹配规则如下:

1. 优先匹配精确的urlPattern;

2. 优先匹配更长的urlPattern, 如:/product/list/*的优先级比/product/*高;

3. 优先匹配含有扩展的urlPattern;

 

言归正传,回到DispatcherServlet.

Spring 的DispatcherServlet本身继承自HttpServlet, 所以在web.xml中配置DispatcherServlet和配置其他Servlet没什么区别,那么配置DispatcherServlet的urlPattern时使用*还要注意什么吗?

我们假设我们要开发一个restful风格的api,url是:http://localhost/product/list, 

为此我们准备了一个ProductController类,这个类有一个list方法:

@Controller

@RequestMapping("/product")

public class ProductController {

    @RequestMapping("list")

    public String list(Map<String, Object> model){...}

}

那为了让DispatcherServlet只处理/product路径下的请求,我们要配置DispatcherServlet的urlPattern为:

/product/*

看起来好像就没有问题了,但是我们用浏览器访问以下http://localhost/product/list得到的肯定是:404

我们检查一下urlPattern和@RequestMapping似乎找不出什么问题出来,看起来问题出现的有点莫名其妙。

好,我们按照以下三个方法分别debug一下:

1. urlPattern换成/product/list;

or

2.访问http://localhost/product/product/list;

or

3.移除@RequestMapping("/product")

会发现都能访问了。

分析一下我们可以确定的是在使用*配置urlPattern的情况下, DispatcherServlet在接收到http请求后,要转给哪个controller来处理并不是完全根据urlPattern来的(具体DispatcherServlet怎么处理urlPattern请关注后续博文DispatcherSerlvet源码解析之url),而是根据*匹配的部分。

在这个例子中:

/product/*中*匹配上的是“list”, DispatcherServlet会把请求转发给有@RequestMapping(“list”)注解的controller方法

 

 

 

© 著作权归作者所有

喂码呢
粉丝 5
博文 12
码字总数 5018
作品 0
浦东
程序员
私信 提问
配置Spring MVC DispatcherServlet使用路径通配符

通常情况下,我们是按照如下所示来配置Spring MVC中的DispatcherServlet的: <servlet> <servlet-name>servletname</servlet-name> <servlet-class>org.springframework.web.servlet.Dispat......

喂码呢
2016/09/27
87
0
Spring MVC原理及配置详解

【spring】Spring MVC原理及配置 1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简...

qq58edf1d989a2d
2018/06/26
0
0
spring MVC 静态资源处理

对于spring mvc的静态资源处理。 由于初期的时候对于spring MVC对于静态资源的处理并不是很好,如果将DispatcherServlet请求映射配置为"/",则springMVC则将捕获web容器所有请求,包括静态资...

bosscheng
2013/05/07
0
0
第三章 DispatcherServlet详解

3.1、DispatcherServlet作用 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有...

亮liang
2015/03/20
0
0
spring MVC配置详解

现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要...

wangxuwei
2016/01/10
126
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
51分钟前
3
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
8
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
4
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部