方法有三种,其一是web.xml中添加
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
参考地址:https://www.cnblogs.com/mophy/p/8465598.html
记录排错,有一种办法是在dispatcher.xml使用<mvc:resources mapping="" location=""/>
通过Mapping和location设置路径地址让dispathcher忽略地址下静态资源
经测试,在一个项目中对JS文件有效,在另一个项目中使用时导致了Controller地址找不到的问题,再查询得知,需启用<mvc:annotation-driven/>注解扫描,但启动后仍失败,没有发现问题根本原因。
采用了上面的解决办法,在这里记录一下,以上。
2020/4/8号
再次遇到该问题,这次遇到后使用了无数办法包括
web.xml - springmvc.xml - 修改绝对路径 - 重启IDEA intellJ - 配置默认servlet的xml标签统统失效
其次发现在谷歌浏览器的检查器中显示原先的src访问路径没有发生改变,通过修改了html内容,不知为何导致刷新了对静态资源的路径加载地址修改,成功导入CSS,但重复该方法在导入JS的测试中再次失败。
通过对照试验测试,尝试调换了css和js位于web.xml中的servlet-mapping加载顺序,发现在调换过程后,原先成功的CSS失效了,但JS成功加载,我误以为是因为下面这种写法
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
======================================
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
因为分开servlet-mapping写,导致下方的default内容覆盖了上方,于是将url-pattern组合到一起。但发生爆红,强制测试仍然是同样结果,原先成功的CSS失效JS成功加载。
于是因为不稳定刷新加载情况,不是浏览器缓存,我想到了可能是xml由某种缓存方式存了起来。
xml的配置初衷是因为Spring框架需要通过动态代理和反射技术加载配置数据进入框架内,加载方法由Spring编写好了,如果方法没问题,问题一定发生在中间,也就是浏览器之前,运行tomcat之后,那么,真相只有一个!
没错,是Maven
?????
哈哈哈哈,开始下意识反应,一定是XML和Tomcat拥有某种我不知道的奇妙缓存机制,经过搜索发现,这俩默认缓存机制不会,也不可能在设计中默认捆绑xml的数据缓存,这非常鸡肋,会导致配置设置繁杂难用
然后,我看到了有个帖子说清除tomcat的缓存方法是打开maven菜单的clear
噢~~~,我顿悟了
仔细观察就会发现,其实maven的clear功能不是清除tomcat的缓存,而是清除了maven对项目打包的部署文件,也就是没用maven之前,idea的out文件夹 / war包 / 编译文件。
tomcat会将编译好的部署文件真正塞进肚子里进行部署运行。
静态资源失效,正是因为maven没有像我以为的那样频繁自动把文件打包编译。代码编写没有问题,问题出在写了之后,即使在Ctrl+s保存之后,代码没有编译进要加载的服务器内。以致编写地址没有找到。
加载成功后,再次测试img文件,写完代码使用maven先clear在install,代码成功部署,资源找到,
问题解决
网友评论