springmvc的静态资源无法访问解决方法(基本全面)

阅读: 评论:0

springmvc的静态资源无法访问解决方法(基本全面)

springmvc的静态资源无法访问解决方法(基本全面)

问题:

目录结构如下:

css和images这两个静态资源无法访问,打开tomcat服务后,直接去浏览器访问
localhost:8080/css/main.css失败

解决方案1

查看访问路径是否正确,tomcat配置的虚拟路径有没有加在浏览器的访问中

1.如果虚拟路径设置的是一个斜杆/,那么访问localhost:8080/css/main.css是正确路径
2.否则需要加上你配置的或者默认的虚拟路径在访问路径前
3.比如我的application context不是一个斜杆,而是/newDome_war_exploded,那么正确的访问路径是localhost:8080/newDome_war_exploded/css/main.css

解决方案2(主要解决方法)

如果tomcat配置的是/或者访问路径正确仍是无法获得静态资源,则查看l中mvc的配置,你的前端控制器dispatcherServlet是不是全部拦截,即为/

这里介绍一下url-pattern//*的区别:

<url-pattern>/</url-pattern>:代表拦截除了*.jsp以外的资源(比如html、css、js、图片资源等静态资源)
<url-pattern>/*</url-pattern>:代表拦截全部请求,包括*.jsp
也就是说/*比/多拦截了动态资源
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"version="4.0"><welcome-file-list><welcome-file>/WEB-INF/pages/welcome.jsp</welcome-file></welcome-file-list><!--配置Spring的监听器,默认只加载WEB-INF目录下的l配置文件--><listener><listener-class>org.t.ContextLoaderListener</listener-class></listener><!--设置配置文件的路径--><context-param><param-name>contextConfigLocation</param-name><param-value>l</param-value></context-param><!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载l配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>l</param-value></init-param><!--启动服务器,创建该servlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!--解决中文乱码的过滤器--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

可以看到&#l中的dispatcherServlet的拦截路径为/,则是拦截所有请求,包括静态资源,则浏览器是访问不到静态资源的,那么解决方案有以下三种:

  • 方法1、配置<url-pattern>/</url-pattern><url-pattern>*.do</url-pattern>,表示只拦截以.do结尾的请求,这样的好处是静态资源不会被拦截,可以很好的访问,但坏处是你的前端请求需要每次在末尾加上.do
  • 方法2、<url-pattern>/</url-pattern>不变,在最后加上default来排除拦截静态资源(推荐)
      <!--配置前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载l配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>l</param-value></init-param><!--启动服务器,创建该servlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- mvc对静态资源放行 --><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.css</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.js</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.png</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.gif</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.jpg</url-pattern></servlet-mapping>
  • 方法3、仍然保持原样,对进行静态资源过滤(推荐)
    <!--开启注解扫描,只扫描Controller注解--><context:component-scan base-package="com.cheng"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan><!--配置的视图解析器对象--><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!--过滤静态资源--><mvc:resources location="/css/" mapping="/css/**" /><mvc:resources location="/js/" mapping="/js/**" /><mvc:resources location="/images/" mapping="/images/**" /><!--开启SpringMVC注解的支持--><mvc:annotation-driven/>

<mvc:resources location="/css/" mapping="/css/**" />
location="/css/"表示静态资源实际的相对路径位置
mapping="/css/**"表示浏览器的uri访问地址
比如访问localhost:8080/css/main.css,这个url对于的mapping就是/css/main.css,它是在设置的mapping的范围内的,随后就去拿到对应的实际路径location中的静态资源,那么静态资源这样就可以访问到了。

解决方案3(编译问题)

方案2任意一种配置后楼主即可访问成功静态资源

但仍会有特列存在,在此添加解决方案3,如果之前的所有办法都试过了,还是无法访问静态资源,那么一定是编译有问题。
解决:

首先删除target包

去build中rebuild一下

如果是maven项目,再打开maven,点击第二个按钮

再次运行你的springmvc项目,静态资源得以访问成功!

如果本文章对你有所帮助,请点个赞支持一下作者~

本文发布于:2024-01-31 05:57:26,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170665184926035.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23