tomcat8 编写字符编码Filter过滤器无效问题
做一个解决全站的字符编码过滤器,过滤器类和配置如下:
过滤器类:
package com.charles.web.filter; import java.io.IOException;
import java.lang.reflect.Proxy; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class CharacterEncodingFilter implements Filter { public void destroy() {
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response; HttpServletRequest newRequest = (HttpServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(),
req.getClass().getInterfaces(), (proxy, method, args) -> {
if ("getParameter".equals(method.getName())) {
String str = (String) method.invoke(req, args);
return new String(str.getBytes("iso8859-1"), "utf-8");
}
return method.invoke(req, args);
}); resp.setContentType("text/html;charset=utf-8"); chain.doFilter(newRequest, resp); } public void init(FilterConfig fConfig) throws ServletException {
} }
过滤器配置:
<!-- 解决全站乱码的filter -->
<filter>
<display-name>CharacterEncodingFilter</display-name>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.charles.web.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是在前端form的提交方式是get的情况下,得到的仍然是乱码。
刚开始一直纠结于过滤器是不是写错了,编码集是不是写错了,但是经过测试,并没有错,过滤器正常运行,
最后把new String(str.getBytes("iso8859-1"), "utf-8")改为new String(str.getBytes("utf-8"), "utf-8")后台就能得到值,不再是乱码了。最后百度了下,
说tomcat8默认的编码集是utf-8,tomcat8之前默认的编码集是iso-8859-1,恍然大悟......
总结:tomcat7及其版本之前默认的编码集是iso-8859-1,tomcat8默认的字符集已经是UTF-8,所以不再需要为request.getParameter()的结果进行转码,不需要编码编码过滤器类了
tomcat8 编写字符编码Filter过滤器无效问题的更多相关文章
- Filter 字符编码Filter 一
使用字符编码Filter package com.helloweenvsfei.filter; import java.io.IOException; import javax.servlet.Fil ...
- spring字符编码filter
项目中的字符编码问题,spring提供统一的字符处理filter,只需要在项目入口web.xml中配置CharacterEncodingFilter即可,具体配置如下: <!-- 配置过滤器,同 ...
- 字符编码的过滤器Filter(即输入的汉字,能在页面上正常显示,不会出现乱码)
自定义抽象的 HttpFilter类, 实现自 Filter 接口 package com.lanqiao.javaweb; import java.io.IOException; import ja ...
- Servlet 设置字符编码filter
filter package common; import javax.servlet.*; import java.io.IOException; public class EncodingFilt ...
- JavaWeb -- Servlet Filter 过滤器
1. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技术,开发人员可以实现用户在 ...
- web.xml 设置字符编码
个人理解 就是为了防止在前端输入的数据到了后台发生乱码 直接复制到web.xml里面就可以使用 亲测 能用!!! <!-- 前端过滤器设置字符编码 --> <filter> ...
- Jsp字符编码过滤器
通过此过滤器,可以实现统一将编码设置为UTF-8. 1.首先在web.xml中配置,添加如下代码: <!-- 过滤器 --> <filter> <filter-name& ...
- [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 160909、Filter多方式拦截、禁用IE图片缓存、Filter设置字符编码
dispatcher多方式拦截 我们来看一个例子 我们定义一个index.jsp,里面有一个链接跳转到dispatcher.jsp页面 <body> <a href="di ...
随机推荐
- 0 推荐系统——CB和CF
一.基于内容的推荐(CB,Content-based Recommendations): 基于内容的推荐CB应该算是最早被使用的推荐方法,它根据用户过去喜欢的产品(本文统称为 item),为用户推荐和 ...
- 关于HTML的引入CSS文件问题
一 html代码引用外部css文件时若css文件在本文件的父目录下的其他目录下,可使用绝对路径.此时路径要写为 “ ../ ”形式,如在tomcat下建立一个test文件,在该文件中建立两个文件 夹 ...
- 【iOS】更换证书遇到的问题
今天给一个项目换证书的时候遇到了这个问题: Code Sign error: Provisioning profile does not match bundle identifier: The pr ...
- host配置
host添加地址 今天是我第一天入职,坐到工位的第一件事就是配置host,因为连接测试环境需要本地授权,所以要配置.这里简单记录下配置中遇到的问题和操作的步骤 操作环境是win10,之前公司一直使用的 ...
- go interface衍生的插件化处理
在设计程序的许多应用场景中我们会遇到大体分为三个阶段的任务流. 第一.入口 一个或多个入口,等待阻塞的.或者主动请求方式的. ============================== 比如任务流需 ...
- 消息中间件和JMS介绍(一)
在一个公司创立初期,他可能只有几个应用,系统之间的关联也不是那么大,A系统调用B系统就直接调用B提供的API接口:后来这个公司做大了,他一步步发展有了几十个系统,这时候A系统要调用B系统的接口,但是B ...
- 冬天苹果笔记macbookpro消除静电的方法
冬天mac除静电的方法 1.mac虽然声称不需要关机,但和apple技术人员沟通后,还是需要1周进行一次关机操作 2.知乎上的回答:https://www.zhihu.com/question/195 ...
- 【0801 | Day 6】Python基础(四)
Part 13 流程控制之while循环 一.语法 while 条件 code 1 code 2 code 3 ... while True: print('*1'*100) print('*2' ...
- 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)
0.前言 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内 ...
- Winform 自定义文本框
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...