出错原因:出现这个错误就是因为response.setContentType("text/html;charset=utf-8")这句话把所有的响应都转换成为了html文件,使得css文件和js文件失效。

解决办法:

1. 第一种:在过滤器过滤的时候进行判断,如果是css请求,就直接通过,不做操作。

bootstrap5 不能用jquery吗 bootstrap引入css不生效_bootstrap

 

2. 第二种办法:我们在过滤器中只是设置编码:并不设置响应类型为html文件。

bootstrap5 不能用jquery吗 bootstrap引入css不生效_服务器_02

 

这个问题搞了一整天,三次大战这个问题:

第一战:

在做登陆注册功能的时候,调试好好的,突然所有的bootstrap样式就失效了。我啥也没干就失效了。。。

很奇怪,然后就去查找原因,发现是bootstrap.css没起作用。但是我当时写的路径是对着的,在浏览器的开发人员工具中已经看到了css文件,只不过使用的是相对路径,像这样  css/bootstrap.css 。

后来在bootstrap官网上重新使用cdn引入了css,就能使用了。但是,我还是想用本地的bootstrap。这天时间很晚了,就没继续研究。第二天,我重新导入了bootstrap的文件夹,并且修改为根路径的访问方式,发现,居然tmd能用了!!!我想着可能是由于相对路径的原因,会出问题。所以,以后不要使用相对路径了。用根路径或者绝对路径吧。

 

第二战:

        emmm,刚解决掉,又出现了一次,这次的解决办法还是那样,先改成用cdn导入css,进入页面查看一下,恢复好了,不知道这是发什么神经。。可能和我写的全局过滤器中过滤中文乱码时response设置成了text/html有关??不应该呀,我又尝试着改变了过滤器,使其把响应都设置为text/html,像这样:response.setContentType("text/html;charset=utf-8"); 接着我又重启了服务器,发现页面还是好好的,并没有变化。所以我觉得和这个没关系。

 

第三战:

又又又又出现了问题,不过不同的是这次找到了错误的根源:原因就是因为过滤器。

bootstrap5 不能用jquery吗 bootstrap引入css不生效_css_03

  我的过滤器是过滤这个项目下的所有请求的,本意是用来设置编码的,防止中文乱码问题。但是这样做,会把所有的响应文件都设置成为text/html。在打开页面需要引入css的时候,页面会请求服务器中的css文件,服务器响应的时候却把这个css文件转换成了html,所以css就失效了。

来总结一下:出现这个错误就是因为response.setContentType("text/html;charset=utf-8");把所有的响应都转换成为了html文件,使得css文件和js文件失效。之所以花费了这么长的时间去解决,主要还因为有缓存的影响,在我第二次出错的时候,我查完资料后怀疑就是这个response设置导致的后果,但是当我注释掉这个设置,重启服务器并且刷新页面之后,错误并没有被解决掉。其实,当时错误应该是解决掉了的,不过因为浏览器缓存的原因,才导致我的判断失误。为什么这么说?比如说,当我第一次访问这个页面,页面中又去访问css,结果拿到的是被强转成html的css文件,这时候css已经失效,所以出现了失效情况。当我注释掉那句配置成text/html的语句,然后重启服务器并刷新页面之后,打开页面出现的仍然是失效的情况。这就是因为浏览器缓存,因为第一次访问时拿到的失效的css文件还在缓存之中,浏览器直接使用的是这个失效的css文件,并没有再次从服务器中获取到文件。如果当时清空一下浏览器的缓存再刷新页面,立马就会恢复正常。