乱码过滤器Filter的惨痛教训

解决IDEA中JSP项目突然无法显示Bootstrap样式的问题,发现全局乱码过滤器中resp.setContentType设置导致CSS和JS无法正确加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天使用 IDEA 写一个 jsp+servlet 的小项目,结果上午运行的好好的,晚上就突然样式全都乱掉了。

┗( T﹏T )┛ 我太难了。

问题描述:jsp无法显示 bootstrap 样式,但功能完好。

先说结论:设置的乱码过滤器有resp.setContentType(“text/html;charset=utf-8”); 使得页面响应时带有<html></html>标签,详情可以看下面。不想看,去乱码过滤器删除上面这句就行了。


详情:

一开始我以为是我的 jsp 里面路径写的不对,但是仔细检查发现完全是正确路径。

百度一番发现,这个问题要么是说 jsp 里面 的 CSS 和 JS 路径不对,要么就是让我清除浏览器缓存。

然而并没有什么卵用。

排除了路径问题和缓存问题,我还是找不到问题所在,终极办法:重建一个项目,cv代码。

然而并没有什么卵用。

行吧,这次我一个个包复制过去,清一次缓存,复制一个运行一次,换个浏览器再验证一次,然后又新建了一个项目,一个个包终于让我试出来了,在com.cslg.fxh.filter (过滤器包)中终于让我找到了问题所在。

@WebFilter(value = {"/*"})
public class CodeFilter implements Filter {
    public void destroy() {
        System.out.println("乱码处理过滤器销毁!");
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");//问题所在
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {
        System.out.println("乱码处理过滤器启动!");
    }

}

乱码过滤器

resp.setContentType(“text/html;charset=utf-8”); 这句话让我的css样式过不去。

原因分析:这句代码是在响应页面时让浏览器将响应解读成 text/html 的格式,但是我有些页面是不写html标签的。

详情:这是我的 index.jsp 的大体分布图。
在这里插入图片描述
这是我的 header.jsp,这是没有html标签和body标签的!!!

在这里插入图片描述
如果你在过滤器中使用 resp.setContentType(“text/html;charset=utf-8”); 并且配置为全局使用。

在页面输出时会变成这样,你的 CSS和JS无法进入一个html页面。因为乱码过滤器把你的响应页面设置成了html页面,所以输出时带有<html></html>标签

在这里插入图片描述
所以删掉 resp.setContentType(“text/html;charset=utf-8”); 一切都解决了。

问题来了:这句话上午也存在,运行时怎么就能正常显示呢???浏览器这么强能一直给我缓存着页面???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值