tomcat配置无错但是还是乱码处理笔记

最近在重构项目过程中 出现一个乱码bug tomcat 、页面、后端编码都设置了编码为utf-8 但是在request的coyoterequest属性的parameters中的encodeing还是iso的编码虽然queryStringEncodeing是utf-8 准确的应该是如下截图才能正确解析页面的数据

tomcat配置无错但是还是乱码处理笔记_第1张图片
图片.png

最终分析是由于web容器中的执行顺序导致编码过滤器未执行

一般我们在构建j2ee项目的时候会在web.xml中如下配置


 
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        encodingFilter
        /*
    

这个过滤器需要放在所有过滤器之前执行 否则其他过滤器处理过request的话 这个过滤器就失效了

web容器中 context-param lister filter servlet执行顺序

context-param -> listener -> filter -> servlet

就是说 不管你context-param配置在web.xml中任意地方 都是第一执行的其次就是执行lister

然后按照filter配置的位置来生成filterchain的顺序并且执行过滤器 最终才是执行servlet

这次乱码问题就是存在于我的编码过滤器不是第一执行 其他过滤器先对request进行了处理 导致失效 从而乱码 这个 和tomcat 的server.xml和前端无关 纯粹是编码过滤器失效

总结

编码问题总是出现在有网络io或者磁盘io的地方 只要一点点缩小错误的位置 找到乱码出现的起始点 从中找出那个地方编码或者解码的设置来进行修改 修复乱码问题总是先定位那个地方编码或者解码出现问题

你可能感兴趣的:(tomcat配置无错但是还是乱码处理笔记)