踩bug使我快落,今天在学习smbms管理系统的时候手贱啊,问题解决就很明朗!!
首先要对<!DOCTYPE html>
要有一定的认识,积累多多总有好处!
那么我来讲一下今天我遇到的问题,因为一开始对于jsp加这个有点不太了解,所以总认为是这个<!DOCTYPE html>
的错误,但是很庆幸自己从这个认知里面走出来。
真实问题是:
过滤器导致的对text/html的全局设置,改变了所有的contentType,包括css的,这样就发生问题了。
问题详解:
chrome浏览器的控制台黄色警告:
然后通过这一句其实有点眉目,意思大概是type问题出错,text/html?
通过network的查看发现,本来是text/css,为什么变成了text/html?
找到过滤器,问题代码段response.setContentType("text/html;charset=utf-8");
这一句的作用域设置了全部!!!导致css也被改变。
过滤器代码:
public class CharacterEncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request,response);
}
public void destroy() {
}
}
过滤器注册代码:
<!-- 字符编码过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.xv.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
问题解决
1、删除response.setContentType("text/html;charset=utf-8");
这一句,切记如果没有效果清除浏览器缓存再运行应该就可以了。
2、添加css过滤器并注册,切记如果没有效果清除浏览器缓存再运行应该就可以了。
css过滤器代码:
public class CssEncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
response.setContentType("text/css;charset=utf-8");
chain.doFilter(request,response);
}
public void destroy() {
}
}
css过滤器注册代码:
<!-- css过滤器 -->
<filter>
<filter-name>CssEncodingFilter</filter-name>
<filter-class>com.xv.filter.CssEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CssEncodingFilter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
大家有什么疑问或者有什么好的推荐,希望多带带小编,希望本文能帮助到你们,程序猿加油!!!
版权声明:本文为weixin_45637920原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。