webapp(WebRoot)目录下的jsp访问不了webapp目录的css文件的问题解决

今天在做一个SSM项目的时候遇到了一个很奇怪的bug,直接上图:

webapp目录结构如下:

webapp目录下的login.jsp文件里的部分内容(注意路径,是相对路径): 

可是当我访问login.jsp文件的时候,link标签引入的.css文件却不起效果了: 

 

右键查看源码:

点击引用的css文件,却报了404的错: 

然后我在开发者模式里查看路径,并没有错:

 

这一系列查看下来就让我很头大了,查看网上的关于jsp访问不了css文件问题的博客,里面描述的很多都是在WEN-INF目录下的jsp访问不到webapp(WebRoot)目录下的情况,而且我的静态资源映射已经配置了。

继续查看,我的项目是使用了Spring框架,在我的web.xml文件中配置了拦截器:

注意拦截器拦截的url,它是把所有访问资源的请求都拦截下来了,包括静态资源访问,于是我把这个拦截器注释掉了,之后页面就能正常显示了,查看页面源码也可以直接定位到.css文件了。

原来, 是这个拦截器阻止了我对.css静态文件的访问。

所有最终还是拦截器的问题,后来我看去仔细看我的静态资源配置:

<!--静态资源映射-->
    <mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
    <mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>
    <mvc:resources mapping="/html/**" location="/WEB-INF/html/"/>
    <mvc:resources mapping="/img/**" location="/WEB-INF/img/"/>
    <mvc:resources mapping="/jsp/**" location="/WEB-INF/jsp/"/>

傻眼了,发现原来是我的映射的地址错了,真正的静态文件不在WEB-INF下,而我这里却设置了在WEB-INF下,这样的话如果外面想访问"/css/**"的映射文件, 就去"/WEB-INF/css/"路径找,那当然是找不到啊。

后面我把静态资源映射的配置改成:

<!--静态资源映射-->
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/html/**" location="/html/"/>
    <mvc:resources mapping="/img/**" location="/img/"/>
    <mvc:resources mapping="/jsp/**" location="/WEB-INF/jsp/"/>

就OK了。

猜你喜欢

转载自blog.csdn.net/weixin_38418951/article/details/97133897