springMVC-静态资源

springMVC-静态资源,第1张

接上一篇:springMVC跳转和传值

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

  1. 如上图可以看到url-pattern为“/”
  2. 如果没有这个servlet配置,tomcat中有一个全局的servlet:org.apache.catalina.servlets.defaultServlet
  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


<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>

    <mvc:default-servlet-handler/>

beans>

该行代码:它会在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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/869749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存