静态资源访问问题以及两种解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38409944/article/details/82885249

为什么会出现静态资源访问问题呢?

因为拦截器的问题,先来看一下我的web.xml配置:

 <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc/springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
   <!-- <url-pattern>/</url-pattern>  http://localhost:8080/Json/toUploadPage-->
    <!--<url-pattern>*.action</url-pattern>-->
  </servlet-mapping>

主要是<url-pattern>的配置。

在springmvc中 DispatcherServlet是前端控制器,只要路径符合条件就寻找对于的处理器。
情况1:

//只拦截结尾是action的路径交给DispatcherServlet
<url-pattern>*.action</url-pattern>

情况2:

//拦截所有的资源交给DispatcherServlet,包括静态资源
<url-pattern>/*</url-pattern>

有个问题,如果返回jsp,也会重新进入DispatcherServlet,但是此时找不到对应的处理器就404错误。

情况3:

//拦截所有的资源(除了jsp)交给DispatcherServlet,包括静态资源
<url-pattern>/</url-pattern>

特点除了jsp,其他任何资源都会拦截,包括.html .jpg.

参考:
https://my.oschina.net/u/2474629/blog/693115
https://blog.csdn.net/u010648555/article/details/51612030
https://stackoverflow.com/questions/4140448/difference-between-and-in-servlet-mapping-url-pattern


解决方法:

方法1:
springmvc中配置静态资源的解析路径,讲=将需要加载的静态资源的uri路径配置在标签里,然后配置该uri映射的正式资源路径:

<mvc:resources location="/image/" mapping="/image/**"></mvc:resources>
<mvc:resources location="/html/" mapping="/html/**"></mvc:resources>

注意 :image和html都是在webapp下的文件夹。
WEB-INF下的资源无法用路径直接访问,所以将springmvc中的view资源放在其下。

方法2:
springmvc.xml配置:

<mvc:default-servlet-handler></mvc:default-servlet-handler>

在springmvc上下文定义了一个默认的requesthandler,对DispatcherServlet进行筛选,如果是没有经过映射的请求就交给web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet前端控制器处理。

猜你喜欢

转载自blog.csdn.net/qq_38409944/article/details/82885249