全站统一字符编码的几种方式
来源:互联网 发布:如何用手机检查网络 编辑:程序博客网 时间:2024/06/05 09:28
统一字符编码
装饰设计模式
import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Map;public class EncodingFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { //强转 HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; //放行 chain.doFilter(new MyRequest(request), response); } public void init(FilterConfig config) throws ServletException { }}class MyRequest extends HttpServletRequestWrapper { private HttpServletRequest request; //同一个对象只进行一次编码处理 private boolean flag = true; public MyRequest(HttpServletRequest request) { super(request); this.request = request; } @Override public String getParameter(String name) { if (name == null || name.trim().length() == 0) { return null; } String[] values = getParameterValues(name); if (values == null || values.length == 0) { return null; } return values[0]; } @Override public String[] getParameterValues(String name) { if (name == null || name.trim().length() == 0) { return null; } Map<String, String[]> map = getParameterMap(); if (map == null || map.size() == 0) { return null; } return map.get(name); } @Override public Map<String, String[]> getParameterMap() { //截获表单访问方式 String method = request.getMethod(); Map<String, String[]> map = null; if (method.equalsIgnoreCase("POST")) { try { request.setCharacterEncoding("UTF-8"); map = request.getParameterMap(); return map; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else if (method.equalsIgnoreCase("GET")) { map = request.getParameterMap(); if (flag) { for (String key : map.keySet()) { String[] values = map.get(key); for (int i = 0; i < values.length; i++) { try { String value = new String(values[i].getBytes("ISO8859-1"), "UTF-8"); values[i] = value; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } map.replace(key, values); return map; } flag = false; } } return super.getParameterMap(); }}
使用代理
import java.io.IOException;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;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.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;@WebFilter(urlPatterns="/*")public class GenericCharacterEncodingFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { final HttpServletRequest req = (HttpServletRequest) request; // 对req产生代理对象: HttpServletRequest myReq = (HttpServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(),req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 增强getParameter: if("getParameter".equals(method.getName())){ // 增强. // 根据请求方式: String type = req.getMethod(); if("get".equalsIgnoreCase(type)){ // 调用原有的getParameter: String value = (String)method.invoke(req, args); String s = new String(value.getBytes("ISO-8859-1"),"UTF-8"); return s; }else if("post".equalsIgnoreCase(type)){ req.setCharacterEncoding("UTF-8"); return method.invoke(req, args); } } // 不增强: return method.invoke(req, args); } }); chain.doFilter(myReq, response); } @Override public void destroy() { }}
阅读全文
0 0
- 全站统一字符编码的几种方式
- 统一全站字符编码
- 字符常见的几种编码方式
- 字符常见的几种编码方式
- 字符常见的几种编码方式
- 字符常见的几种编码方式
- 字符常见的几种编码方式
- 字符的几种编码方式
- 字符常见的几种编码方式
- 字符常见的几种编码方式
- 2Filter应用1统一全站字符编码的过滤器
- Filter 统一全站编码
- Filter-统一全站编码
- eclipse统一编码的方式
- 使用过滤器统一全站编码
- web--4.统一全站编码
- 常见的几种字符编码方式及Unicode与UTF-8之间的关系
- 常见的几种字符编码方式 ASCII Unicode UTF-8 GBK
- C/C++ 中的0长数组(柔性数组)
- [详细分析]实现一个8bit数据(unsigned char)的指定位的置0或者置1操作,并保持其他位不变
- [android-telephony]Android_Telephony(基于N&&O版本)模块介绍
- 计算文件词频
- HDU1434 幸福列车【模拟+优先队列】
- 全站统一字符编码的几种方式
- 关于按值传递和按地址传递
- 其他类
- spring笔记--从零搭建一个简单的HelloWorld程序
- Spring boot学习之spring-data-jpa的使用(一)
- WM_DEVICECHANGE
- 2017暑期ACM俱乐部个人训练赛第1场
- 新手上路 jquery 选择器篇(三) 代码笔记
- WUST 1846 营养膳食(贪心)【简单贪心类模板】