SpringMVC访问静态资源

冷暖自知 提交于 2020-01-15 07:25:35

问题背景

自己做SpringMVC项目的时候,希望通过login.jsp向resume.jsp传递参数name,resume.jsp是由我本地html生成的,结果发现页面中的css以及图片等静态资源都没有被访问到。上网看了大神的解决方案,总结就以下三种。

  1. 修改web.xml配置
    因为我之前的设置,将所有的请求均拦截下来,然后交由对应的controller处理。设置如下:
<servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <!--拦截所有请求-->
      <url-pattern>/</url-pattern>
</servlet-mapping>

然而,因为css、js、图片等是静态资源,一般不会有专门的controller处理,这时需要告诉服务器静态资源不需要拦截。设置如下:

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpeg</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <!--拦截所有请求-->
        <url-pattern>/</url-pattern>
 </servlet-mapping>

这样设置使得以.css、.jepg、.js结尾的请求交给Tomcat处理,而Tomcat就可以根据路径(一般使用相对路径)进行查询。这也是试验成功的做法,虽然是最麻烦的做法,但成功地访问到了图片和css。

  1. 修改dispatcher-servlet.xml配置
    在dispatcher-servlet.xml中添加如下代码:
<mvc:resources mapping="/image/**" location="/image/"> </mvc:resources> <mvc:resources mapping="/css/**" location="/css/"> </mvc:resources>

这种做法相当于给静态资源请求分配特定的handler,当然并不是handler,只是告诉服务器去对应的location下查找对应的mapping。
我在使用这种做法时,发现访问映射…/login提示404错误,即意味着不能访问controller,这时需要在上述代码后添加:

<mvc:annotation-driven/>

这默认服务器会帮我们注册默认处理请求。
3.全部使用默认映射
在dispatcher-servlet.xml中添加:

<mvc:default-servlet-handler/>

这会使得所有的请求均以默认的方式处理,丧失了SpringMVC独特的restful风格。所以我建议还是使用前两种做法。

记录我的经验
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

拜拜┏(^0^)┛

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!