filter过滤器解决全局编码问题
来源:互联网 发布:网络增值业务推广方案 编辑:程序博客网 时间:2024/05/21 21:43
java 源码文件
package cn.itheima.web.filter;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Map;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.HttpServletRequestWrapper;/** * 通用编码解决方案 * */public class GenericEncodingFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {// 转型为与协议相关对象HttpServletRequest httpServletRequest = (HttpServletRequest) request;// 对request包装增强HttpServletRequest myrequest = new MyRequest(httpServletRequest);chain.doFilter(myrequest, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}}// 自定义request对象class MyRequest extends HttpServletRequestWrapper {private HttpServletRequest request;private boolean hasEncode;public MyRequest(HttpServletRequest request) {super(request);// super必须写this.request = request;}// 对需要增强方法 进行覆盖@Overridepublic Map getParameterMap() {// 先获得请求方式String method = request.getMethod();if (method.equalsIgnoreCase("post")) {// post请求try {// 处理post乱码request.setCharacterEncoding("utf-8");return request.getParameterMap();} catch (UnsupportedEncodingException e) {e.printStackTrace();}} else if (method.equalsIgnoreCase("get")) {// get请求Map<String, String[]> parameterMap = request.getParameterMap();if (!hasEncode) { // 确保get手动编码逻辑只运行一次for (String parameterName : parameterMap.keySet()) {String[] values = parameterMap.get(parameterName);if (values != null) {for (int i = 0; i < values.length; i++) {try {// 处理get乱码values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}hasEncode = true;}return parameterMap;}return super.getParameterMap();}@Overridepublic String getParameter(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);if (values == null) {return null;}return values[0]; // 取回参数的第一个值}@Overridepublic String[] getParameterValues(String name) {Map<String, String[]> parameterMap = getParameterMap();String[] values = parameterMap.get(name);return values;}}
web.xml配置文件
<filter> <filter-name>GenericEncodingFilter</filter-name> <filter-class>cn.itheima.web.filter.GenericEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>GenericEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
阅读全文
0 0
- filter过滤器解决全局编码问题
- 全局过滤器解决编码问题
- 使用filter过滤器解决编码问题
- 使用Filter过滤器解决字符编码问题
- 全局编码过滤器(Filter)详解
- 过滤器 Filter 解决乱码问题
- Filter解决编码问题
- 过滤器解决中文编码问题
- 过滤器解决中文编码问题
- Filter永久解决编码问题
- 【Filter】利用过滤器Filter解决post传递的编码问题与利用EL表达式简化参数传递
- Filter全局解决中文乱码问题
- 过滤器filter-解决乱码的问题
- 利用过滤器filter解决乱码问题
- 使用过滤器(Filter)解决乱码问题
- 【JavaWeb-12】Listener监听3个方面、Filter过滤器、全局编码过滤器案例
- 全局编码过滤器--encodingFilter
- Filter编码过滤器
- IDEA 代码没错但是编译出错解决办法
- 计算谱半径(PAT-1063)
- hdu 2136 素数筛法
- myeclipse将javaswing程序打包成可执行文件
- iOS开发 CGContextRef之画虚线
- filter过滤器解决全局编码问题
- 求字符串空格、数字、字母个数--JAVA基础
- 二维费用背包问题+空间优化(滚动数组)
- Java spi
- 验证码前端
- Struts2笔记第三天
- 报错java.lang.Long cannot be cast to java.lang.Integer
- 技术文章 | 从 Apache RocketMQ 和 Kafka 看 Topic 数量对单机性能的影响
- 编译mono5.3的步骤和坑