之前文章讲到Spring MVC的
基础概念
,基本开发流程
,和如何在Spring MVC中传值
和接受参数
以及Spring MVC的跳转(重定向和转发)
之前文章链接
Spring MVC从0到1,推荐新手收藏(超详细)
这篇文章文章讲Spring MVC
访问静态资源
文章目录
静态资源
静态资源(内容不会改变的资源):HTML,js文件,css文件,图片文件等都是静态资源
或者换一句话说:在
所有的客户
访问同一页面时,获取到的内容是相同的,不会因为用户的不同而改变
静态文件没有url-pattern,所以默认是访问不到的,之所以可以访问,是因为,tomcat中有一个全局的servlet:
org.apache.catalina.servlets,DefaultServlet
,它的url-pattern是"/"是全局默认的Servlet.所以每个项目中不能匹配的静态资源的请求,有这个Servlet来处理
Tomcat中的web.xml中有默认的全局的servlet |
---|
那我们直接在Spring MVC中来写html,结果:
令人愤怒的404 |
---|
这是为什么?
因为我们的项目的web.xml中也配置了一个servlet,且路径也是"/" ,这就导致了原本的
tomcat中的全局servlet失效
我们配置的DispatcherServlet |
---|
我们配置的DispatcherServlet也采用"/"作为url-pattern,而我们配置的DispatcherServlet是用来拦截控制器的,而不是静态资源
最终导致了静态资源的无法访问
如何解决静态资源无法访问的问题?
解决方案一
既然找到了原因,是因为我们配置了DispatcherServlet而导致静态资源无法访问,那么只能委屈DispatcherServlet另外换一个路径
DispatcherServlet采用其他的url-pattern ,比如: *.action
此时,所有访问handler(也就是控制器中具体的方法)的路径都要以action结尾!
<!-- 配置前端控制器-->
<servlet>
<servlet-name>mvc_leiyu</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 将后端控制器的配置给前端(核心)控制器 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc.xml</param-value>
</init-param>
<!-- 可选配置 懒汉式加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc_leiyu</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
该handler的访问路径:http://localhost:8080/data/test1.action |
---|
解决方案二
我和DispatcherServlet商量了一下,让它换一个路径访问,它说这样访问
太麻烦
了,而且凭什么要它改路径,并给我扔过来衣蛾图片让自己体会
既然,商量无果,不愿意改路径还要静态资源正常访问
那么只能追加配置了
<!-- 解决无法访问静态资源的问题 额外增加一个handler,且其RequestMapper为"/**" 可以匹配到所有的请求,但是优先级最低 所以如果其他所有的handler都匹配不上,请求会转向"/**" ,恰好,这个handler就是处理静态资源的 处理方式:将请求转会到tomcat中名为dafault的Servlet,让tomcat处理 -->
<mvc:default-servlet-handler/>
解决方案三
当争吵不休时,最终还是静态资源让了步,
静态资源
愿意约束自己,给自己访问时路径发生一点变化
在webapp目录下创建html目录,用来放静态的html资源,其他的静态资源同理
配置
<mvc:resources mapping="/html/**" location="/hhh/" />
- mapping是访问路径,location是静态资源的存放路径(建议同名,见名知意,为了讲述原理,这里不同名)
- 将/html/** 中/**匹配到的内容,拼接在/hhh后就是资源的实际的路径
- http://…/html/a.html 访问的资源时/hhh/a.html
- http://…/page/b.html 访问的资源时/page/b.html
我是雷雨,一个
普本科
的学生,主要专注于Java后端和大数据开发
如果这篇文章有帮助到你,希望你给我一个
大大的赞
如果有什么问题,希望你能留言
和我一起研究
,学习靠自觉,分享靠自愿