首页 >> 大全

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

2024-01-04 大全 29 作者:考证青年

问题:

目录结构如下:

css和这两个静态资源无法访问,打开服务后,直接去浏览器访问

:8080/css/main.css失败

解决方案1

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

1.如果虚拟路径设置的是一个斜杆/,那么访问:8080/css/main.css是正确路径

2.否则需要加上你配置的或者默认的虚拟路径在访问路径前

3.比如我的 不是一个斜杆,而是/,那么正确的访问路径是:8080//css/main.css

_静态资源访问不到_3种访问静态资源的配置方式

解决方案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种访问静态资源的配置方式_静态资源访问不到_

解决方案3(编译问题)

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

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

解决:

首先删除包

去build中一下

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

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

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

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了