springMVC-静态资源

接上一篇:springMVC跳转和传值

1. 静态资源

  1. 静态资源:就是html文件,js文件,css文件,图片文件
  1. 静态文件没有url-pattern,所以默认是访问不到的,如果没有springMVC的配置文件web.xml中的DispatcherServlet中的url-pattern,我们是可以访问,

在这里插入图片描述

  1. 如上图可以看到url-pattern为“/”
  2. 如果没有这个servlet配置,tomcat中有一个全局的servlet:<servlet-class>org.apache.catalina.servlets.defaultServlet</servlet-class>
  3. 它的url-pattern也是/,所以如果每个项目有不能匹配的静态资源,有这个Servlet来处理就可以
  4. 但是现在我们SpringMVC中DispatcherServlet中,也就是上面图片里的配置也采用了“/”作为url-parttern,它把这个“/”给占下了,会导致Tomcat全局的那个servlet不能再处理静态资源
  5. 这个DispatcherServlet的servlet只会去找controller的路径,不会找静态资源

所以我们在这种配置下的springMVC项目中,访问静态资源,例如hello.html文件,会报404,运行结果如下

在这里插入图片描述

1.1 解决方案1

既然是由于DispatcherServlet的url-pattern的“/”导致的,我们可以直接把“/”改为其他的路径,如后缀的形式:*.xmq,这种写法的意思是,以后url以.xmq结尾的controller,都可以被我们的DiapatcherServlet处理


改DispatcherServlet的url-pattern
在这里插入图片描述

后再次访问静态资源hello.html,发现可以访问到了

在这里插入图片描述

以后我们Tomcat运行,访问路径要这样写:访问http://localhost:8080/data/test.xmq,即以.xmq结尾

1.2 解决方案2

在这里插入图片描述

<?xml version="1.0" encoding="UTF8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc
                            http://www.springframework.org/schema/mvc/spring-mvc.xsd
                            http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context.xsd"
>
<!--    注解扫描-->
    <context:component-scan base-package="com.lyx"/>
<!--    注解驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>
<!--    视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
<!--   它会在controller中增加一个handler,也就是一个方法,并且其@requestMapping("/**")
 ,这个访问路径是可以匹配所有请求的意思,但是优先级最低,只有所有路径都匹配后,请求才会转向"/**",
 这个handler会将请求转到tomcat中名为default的Servlet,从而就可以访问到静态资源了-->
    <mvc:default-servlet-handler/>

</beans>

该行代码:<mvc:default-servlet-handler/>它会在controller中增加一个handler,也就是一个方法,并且其@requestMapping(“/**”)
,这个访问路径是可以匹配所有请求的意思,但是优先级最低,只有所有路径都匹配后,请求才会转向"/**",
这个handler会将请求转到tomcat中名为default的Servlet,从而就可以访问到静态资源了

1.3 解决方案3

在mvc.xml文件中添加如下代码

  • 把html、css文件放在static/。。/目录下统一路径
 <mvc:resources mapping="/html/**" location="/static/"/> 

mapping: 映射两个*,表示映射指定路径下所有的URL,包括子路径
	*代表下面的资源
	**代表下面或者所有的子目录
location:本地资源路径
这样如果有访问/images或者/js或者/css路径下面的资源的时候,spring就不会拦截了

Tomcat运行,访问路径为http://localhost:8080/html/hello.html

在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素心如月桠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值