springmvc的静态资源无法访问解决方法(基本全面)
问题:
目录结构如下:
css和这两个静态资源无法访问,打开服务后,直接去浏览器访问
:8080/css/main.css失败
解决方案1
查看访问路径是否正确,配置的虚拟路径有没有加在浏览器的访问中
1.如果虚拟路径设置的是一个斜杆/,那么访问:8080/css/main.css是正确路径
2.否则需要加上你配置的或者默认的虚拟路径在访问路径前
3.比如我的 不是一个斜杆,而是/,那么正确的访问路径是:8080//css/main.css
解决方案2(主要解决方法)
如果配置的是/或者访问路径正确仍是无法获得静态资源,则查看web.xml中mvc的配置,你的前端控制器是不是全部拦截,即为/
这里介绍一下url-中/和/*的区别:
/ :代表拦截除了*.jsp以外的资源(比如html、css、js、图片资源等静态资源)
/* :代表拦截全部请求,包括*.jsp
也就是说/*比/多拦截了动态资源
web.xml的所有内容:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><welcome-file-list><welcome-file>/WEB-INF/pages/welcome.jspwelcome-file>welcome-file-list><listener><listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>listener><context-param><param-name>contextConfigLocationparam-name><param-value>classpath:applicationContext.xmlparam-value>context-param><servlet><servlet-name>dispatcherServletservlet-name><servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class><init-param><param-name>contextConfigLocationparam-name><param-value>classpath:spring-mvc.xmlparam-value>init-param><load-on-startup>1load-on-startup>servlet><servlet-mapping><servlet-name>dispatcherServletservlet-name><url-pattern>/url-pattern>servlet-mapping><filter><filter-name>characterEncodingFilterfilter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class><init-param><param-name>encodingparam-name><param-value>UTF-8param-value>init-param>filter><filter-mapping><filter-name>characterEncodingFilterfilter-name><url-pattern>/*url-pattern>filter-mapping>web-app>
可以看到:web.xml中的的拦截路径为/,则是拦截所有请求,包括静态资源,则浏览器是访问不到静态资源的,那么解决方案有以下三种:
<servlet><servlet-name>dispatcherServletservlet-name><servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class><init-param><param-name>contextConfigLocationparam-name><param-value>classpath:spring-mvc.xmlparam-value>init-param><load-on-startup>1load-on-startup>servlet><servlet-mapping><servlet-name>dispatcherServletservlet-name><url-pattern>/url-pattern>servlet-mapping><servlet-mapping><servlet-name>defaultservlet-name><url-pattern>*.cssurl-pattern>servlet-mapping><servlet-mapping><servlet-name>defaultservlet-name><url-pattern>*.htmlurl-pattern>servlet-mapping><servlet-mapping><servlet-name>defaultservlet-name><url-pattern>*.jsurl-pattern>servlet-mapping><servlet-mapping><servlet-name>defaultservlet-name><url-pattern>*.pngurl-pattern>servlet-mapping><servlet-mapping><servlet-name>defaultservlet-name><url-pattern>*.gifurl-pattern>servlet-mapping><servlet-mapping><servlet-name>defaultservlet-name><url-pattern>*.jpgurl-pattern>servlet-mapping>
<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/**" /><mvc:annotation-driven/>
="/css/"表示静态资源实际的相对路径位置
="/css/**"表示浏览器的uri访问地址
比如访问:8080/css/main.css,这个url对于的就是/css/main.css,它是在设置的的范围内的,随后就去拿到对应的实际路径中的静态资源,那么静态资源这样就可以访问到了。
解决方案3(编译问题)
方案2任意一种配置后楼主即可访问成功静态资源
但仍会有特列存在,在此添加解决方案3,如果之前的所有办法都试过了,还是无法访问静态资源,那么一定是编译有问题。
解决:
首先删除包
去build中一下
如果是maven项目,再打开maven,点击第二个按钮
再次运行你的项目,静态资源得以访问成功!
如果本文章对你有所帮助,请点个赞支持一下作者~