1.【web.xml路径配置】/、/*、*.do
详细解释: 1、"/'表示匹配所有请求(其中包含除.jsp和.jspx外的所有后缀)。 如果不配置静态资源,它会把匹配所有请求都当做是对控制器的访问,去掉后缀进行匹配。例如你访问/main.css会变成/main,这也是造成你引入的.css,.js等静态资源无法访问的原因,因为他们都被当做控制器的路径了。 至于为什么不匹配.jsp和.jspx,是因为在tomcat的web.xml里有这样的配置: 这里由于*.jsp和*.jspx的精度比"/"更高,所以被JspServlet匹配到了,而不是DispatchServlet(jsp的本质也是servlet,它只是让返回数据动态加载的html更加方便) 2、"/*"表示匹配所有请求(包含所有后缀) 这里*.jsp比"/*"的匹配度低,所以配置后会使.jsp也进入DispatcherServlet,而.jsp既不是控制器路径也不是静态资源,所以就算配了静态资源还是访问不到,所以这个/*的配置不适用于DispatcherServlet,一般用于过滤器来拦截所有资源 3、*.do表示匹配所有以.do结尾的请求 这也是比较推荐的一种配置,它只匹配.do结尾的请求,不会匹配到静态资源,静态资源可以被直接访问,省去了配置静态资源的麻烦。
———————————————— 转自 DispatcherServlet url-pattern中 /、/*、*.do中的区别与作用https://blog.csdn.net/lc77777abc/article/details/88779272 2.【静态资源配置】
规则:将星号部分的内容和location里的内容进行拼接。例如:mapping="/resource/img/**" location="/images/",发过来的请求为/resource/img/index/bg.png,则将index/bg.png拼接在/images/后面,/images/index/bg.png,通过这个路径去服务器中的项目根目录下(即WebRoot)找资源。 <mvc:resources /> <mvc:resources />:由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能。 <mvc:resources />允许静态资源放在任何地方,如WEB-INF目录下、类路径下等,你甚至可以将JavaScript等静态文件打到JAR包中。通过location属性指定静态资源的位置,由于location属性是Resources类型,因此可以使用诸如"classpath:"等的资源前缀指定资源位置。传统Web容器的静态资源只能放在Web容器的根路径下,<mvc:resources />完全打破了这个限制。 mvc.xml中配置: <mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/> 以上配置将Web根路径"/"及类路径下 /META-INF/publicResources/ 的目录映射为/resources路径。假设Web根路径下(即WebRoot)拥有images、js这两个资源目录,在images下面有bg.gif图片,在js下面有test.js文件,则可以通过 /resources/images/bg.gif 和 /resources/js/test.js 访问这二个静态资源。 ———————————————— 详细见: 【Spring框架】<mvc:default-servlet-handler/>的作用 https://www.cnblogs.com/dflmg/p/6393416.html 3.【两个星号 /**】SpringMVC interceptor配置,path="/**" 两个星号,与path="/"以及path="/*"的区别 例如
SpringMVC拦截器中的/**是配置全部路径.现在我有一个需求,想要拦截以/user/开头的请求.我的path写为/user/**,这样就能拦截到所有的符号条件的请求. 然后我的项目需求增加了,我在项目中加入了多重权限控制并希望用拦截器去控制它.假设现在有个功能,只开放给管理员,所以我把它的访问路径设为/user/manager/xxxx/xxxx.所以我又加入了一个拦截器,希望拦截路径中存在/manager/的所有的请求.我把path写为/manager/'**,结果却不行. user的拦截器正常,但是manager的拦截器却不工作, 原来/user/**只适用于以/user/开头的请求,/user/的前面什么都不能有, 由于我所有的请求都是/user/开头,所以user的拦截器一直都是可以正常运行的, 但是manager拦截器就不同了,我的path写为/manager/**,但是我所有带有/manager/的请求都是前面有/user/的,所以这不满足path路径中的/manager/**.当你要在这个名称的前面加其他的一个名称时,你需要/*/manager/**,如果前面有多个名称,就是/**/manager/**,当然了,由于/**是通配符,所以以manager开头的url也符合这个条件. |
|