用过滤器和装饰者设计模式(静态代理)解决getParameter乱码问题
来源:互联网 发布:windows 32位 64位 编辑:程序博客网 时间:2024/06/07 02:11
post的乱码问题比较好解决,这里主要是对get请求的乱码做处理
解决思路:增强request对象的getParameter方法,使之 getParameter 直接获取到的就是解决乱码后的数据
有四种方式,
1、继承 :(下下策)
①明确知道全类名
可以打印request实现类,可以知道实现类的全类名
②就是可以在子类中 new 父类
你能确定request实现类,一定可以new么?
确定自己写出的是通用方法。tomcat,weblogic,jboss......
缺点:
①很难实现,几乎没有扩展性
②会占用宝贵的extends位
2、装饰设计模式【静态代理】
优点:
①不用知道实现类,可以用接口。 代码扩展性极强
②不用占用宝贵的extends位
步骤:
①增强类 必须实现 被增强类 实现的所有接口
②增强类 必须能够获得 被增强类 引用
缺点:
如果接口中的无关方法过多,浪费大量实现实现这些无关方法。
解决方案:
1、用动态代理
2、去找包装类,只需要继承包装类,子包装/子增强类
HttpServletRequestWrapper
3、动态代理(暂时先不说)
4、字节码增强(暂时先不说)
具体代码实现:
解决方式:使用装饰者设计模式(静态代理)对getParameter进行功能增强
1、自己的类继承HttpServletRequestWrapper,对其中的getParameter方法进行重写
1、自己写的增强类
package com.itheim.utils;import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class MyHttpRequest extends HttpServletRequestWrapper {HttpServletRequest req;public MyHttpRequest(HttpServletRequest old) {super(old);// TODO Auto-generated constructor stubthis.req=old;}@Overridepublic String getParameter(String name) {String method = req.getMethod();if("get".equalsIgnoreCase(method)){String par = req.getParameter(name);if(par!=null){String result = null;try {result=new String(par.getBytes("iso8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blockthrow new RuntimeException(e);}return result;}}return req.getParameter(name);}}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//解决post乱码request.setCharacterEncoding("utf-8");//解决get乱码HttpServletRequest httpServletRequest=(HttpServletRequest) request;MyHttpRequest request2=new MyHttpRequest(httpServletRequest);chain.doFilter(request2, response);}
0 0
- 用过滤器和装饰者设计模式(静态代理)解决getParameter乱码问题
- JavaWeb学习篇——使用过滤器及装饰器设计模式解决全站乱码问题
- 装饰者模式,静态代理,动态代理
- 设计模式- 代理模式 (静态代理 和 动态代理)
- 设计模式之代理模式和装饰者模式
- 设计模式-代理模式和装饰模式
- 过滤器和动态代理解决乱码
- 【读书笔记】HeadFirst设计模式——代理和装饰者
- 再看设计模式:代理、装饰和适配器
- 设计模式:装饰器和代理
- 设计模式(代理模式--静态代理)
- 设计模式之代理模式(静态代理、JDK动态代理和cglib动态代理)
- 使用过滤器和request装饰增强来彻底解决乱码问题
- 更好的理解装饰设计模式和代理设计模式
- 设计模式之装饰设和代理设计模式
- 装饰设计模式和代理设计模式的区别
- 设计模式之代理模式--静态代理和动态代理
- 设计模式--代理(静态)
- HTML表格标签
- c3p0,druid,dbcp的性能比较
- 909422229__XML的实体引用
- nyoj 1112求次数 STL
- 网络流24题——飞行员配对方案问题
- 用过滤器和装饰者设计模式(静态代理)解决getParameter乱码问题
- Android Support Design Library使用详解
- 五分钟利用docker搭建好openvpn服务环境
- aupe读书笔记
- 欢迎使用CSDN-markdown编辑器
- ORA-01861: 文字与格式字符串不匹配
- go中方法的接收者是值或者指针有什么区别吗?
- Servlet学习笔记---重写URl地址(编码问题)
- VIJOS-P1369 难解的问题