静态资源到处都是坑!明白原理才能绕过这些坑!
web.xml配置servlet中四种路径的区别
在web.xml文件的配置中,四种路径编写方式优先级如下图:
其中b和d都能接收所有请求,仅仅是在优先级上有区别。
d是优先级最低的,所以如果一个路径有”人”要就不会执行到d,tomcat服务器(无论什么服务器)有一个默认的请求处理方案:在tomcat服务器的配置文件: tomcat8\conf\web.xml中有一个默认的web配置文件,其中配置了jsp和default。
都配置了
从图中可以看出,jsp配置的url-pattern为*.jsp和*.jspx,优先级高于/的优先级,所以当请求jsp页面时,会由类JspServlet进行处理。
default配置为在请求路径匹配完其他所有Servlet还是没有匹配到的情况下,请求会被发到default,由DefaultServlet进行处理,一般请求的静态资源,无效路径等等都会通过DefaultServlet进行处理。
而在配置springmvc框架时,一般在web.xml中将DispatcherServlet映射路径配置成/
这样配置会覆盖掉tomcat配置的默认的default,而,DispatcherServlet没有处理静态资源的能力,所以会报错或者需要在springmvc中进行关于静态资源的配置。
什么是静态资源?
css、js、图片、html等都是静态资源
放行静态资源
不使用springmvc框架分析
不使用springmvc框架,这些静态资源请求都会由tomcat的默认的default进行处理。
使用了springmvc框架分析
如果配置的DispatcherServlet的映射路径不为/时,对静态资源的请求最终会由tomcat的默认配置来处理,所以不影响静态资源的正常访问。
如果配置的DispatcherServlet的映射路径为/时,会覆盖掉tomcat的默认的default配置,所以需要在springmvc文件中进行配置,对静态资源进行放行。
放行静态资源的三种方式:
方式一:最简单(推荐)
spring mvc配置文件中加入以下内容:
在springmvc文件中配置上
方式二:更加灵活
在springmvc配置文件中配置
其中,*代表一级目录,**代表多级目录。
方式三:修改DispatcherServlet的映射规则
*.do的优先级高于/,不影响tomcat默认配置的default,所以DispatcherServlet处理不了的会交给tomcat默认default进行处理。
明确:在jsp或html页面中如果有