在使用SpringMVC时,都需要在web.xml中配置一个前端控制器DispatcherServlet

控制器是一个servlet,但这个路径配置就有很多种,之前都是以扩展名配置的路径,如*.do,然后再项目中就就*.do的路径进行访问。

但最近的项目遵循Restful风格,配置的路径如下

可以看到配置的路径为“/”,由于之前疑惑上网查,说是/*和/都是拦截所有请求,于是把这里的路径改成/*,之后项目就出先了404资源找不到的问题。

通过后来查阅资料,以自己的理解  /* 和 / 的区别如下

  首先我们了解一下servlet的匹配规则

    精度匹配>路径匹配>扩展名匹配>内省匹配 (这里具体就不举例了,想了解的同学可以自行百度)

    所有这里的  /属于内省匹配模式(TomCat默认有一个这样的路径),/*属于路径匹配。所以当控制器返回一个结果视图访问时,如果配置的为/*.则SrpingMVC会再次拦截,但由于找不到相关的控制器,就会报404资源找不到。

    如果这里配置的为 / ,首先会覆盖掉Tomcat中默认的,Tomcat默认的是用来处理静态资源的,比如html,jsp等一些静态资源。这里覆盖掉以后,我们就要自己考虑静态资源的处理了。

    

  其次我发现在web.xml中又配置了这样一些路径,由于之前覆盖掉了Tomcat默认的,这里应该是将一些静态资源手动调用Tomcat的默认处理器进行处理,但是在这里面我们没有发现jsp页面,那么控制器返回的jsp还是会被 / 拦截进入到SpringMVC中。

  所以为了防止资源找不到报404,在SpringMVC的配置文件中配置了如下的配置信息

首先的作用是对进入到SpringMVC的静态资源进行处理,功能同Tomcat默认的DefaultServlet功能类似

其次这个的作用是当进入到SpringMVC中并且路径为 / 时,默认跳转到/index.html界面,这貌似就是跳转主页功能。

最后 是SpringMVC提供处理静态资源的,详细用法自行百度。

有个疑惑,假如我访问一个js文件,web.xml里面配置了*.js交给Tomcat处理(扩展名匹配),DispatcherServlet又配置的是‘/’  (内省匹配),而扩展名优先级大于内省,所以说当我访问一个JS静态资源时,是不会进入SpringMVC中的,但这里又在SpringMVC中配置了一些静态资源的处理,不知道有什么用???

总结:

  1./*和/都可以拦截所有请求,但是优先级不一样,/*的优先级要高于/,这也是为什么配置/*会报资源找不到的问题,因为根本到达不了Tomcat默认的Servlet来处理静态资源。

  2.网上说的/*拦截扩展名的,/不会拦截带扩展名的,我觉得这总说法是不对的。还是要理解servlet的匹配规则。

												

SpringMVC配置前端控制器的路径问题的更多相关文章

  1. springMVC(一) --前端控制器(DispatcherServlet)的作用

        SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户 ...

  2. springmvc前端控制器拦截路径的配置报错404

    1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截除了jsp的所有. 2.拦截/*,拦截所有访问,会导致404 ...

  3. springmvc的前端控制器

    <servlet> <servlet-name>xxx</servlet-name> <servlet-class>org.springframewor ...

  4. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

  5. SpringMVC传统风格控制器和基于注解的控制器

    SpringMVC的DispatcherServlet 之前说过springMVC是使用Servlet作为控制器,就是这个用于调度的DispatcherServlet了.这个是servlet,可以根据 ...

  6. springMvc配置 中文api

    http://7xvpsh.com1.z0.glb.clouddn.com/publish/21-2/the-dispatcher-servlet.html springmvc4.1.7:配置 复制转 ...

  7. SpringMVC配置顺序的问题

    1:web.xml:web应用一经加载,先来找他         1):指明applicationContext的位置         2):引入spring监听,ContextLoaderListe ...

  8. 配置<welcome-file>为自定义路径

    welcome-file是web.xml中的一个配置,其作用是配置启动项目时默认跳转的欢迎页面,一般我们会将其指定为一个静态页面. 那如果我们要将自定义的请求路径作为欢迎页面该怎么做呢? 1.配置we ...

  9. SpringMVC 配置和请求方式

    SpringMVC 总结内容 一.什么是 Spring MVC ? Spring MVC 是 Spring 对 MVC 思想的实现(三层架构) 优点: 二.前端控制器 Spring MVC 中的前端控 ...

随机推荐

  1. vue项目起步准备

    1. 项目环境: node.js运行环境(不一定要最新特性的最新版本,用合适的版本即可) 2.项目放在git上管理(网上云仓库码云) 1.创建仓库:选择语言js 2.本地代码和线上代码通过git做成关 ...

  2. 插曲 强大的神器 vmware

    电脑到了  这连天给电脑配环境变量  真的想死  发现用 虚拟机 直接跑别人配置好的镜像文件   多快好省超级开心 比较毒瘤的  clion  不仅要配置c++ 环境  还要走cmake  等一堆东西 ...

  3. h5-过度

    1.过度的基本介绍及写法 .div{ width: 200px; height: 200px; background-color: red; position: absolute; left: 100 ...

  4. 对接memcache经验分享

    接口访问日志  数据结构 分享 apiname 接口名称 apiname[cnt]接口访问次数每访问一次增加一次 这里要处理并发问题 我还没有解决: apiname[cnt][n][spent_tim ...

  5. 吴裕雄--天生自然ShellX学习笔记:Shell 函数

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; [return ...

  6. 吴裕雄--天生自然Linux操作系统:Linux vi/vim

    Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主 ...

  7. 01 语言基础+高级:1-3 常用API第一部分_day07【Scanner类、Random类、ArrayList类】

    day07[Scanner类.Random类.ArrayList类] Scanner类Random类ArrayList类 教学目标 能够明确API的使用步骤能够使用Scanner类获得键盘录入数据能够 ...

  8. java使用HSSFWorkbook下载Excel表格

    @RequestMapping(value = "/exportVectorExcelN", method = RequestMethod.GET) @ResponseBody @ ...

  9. 将List 分成n个长度由调用者指定的子List

    public static void main(String[] args) { List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8); ...

  10. \_\_init\_\_和\_\_new\_\_

    __init__和__new__ 一.__new__和__init__ 曾经我幼稚的以为认识了python的__init__()方法就相当于认识了类构造器,结果,__new__()方法突然出现在我眼前 ...