装饰者模式的应用
来源:互联网 发布:excel2007重复数据标记 编辑:程序博客网 时间:2024/06/04 18:41
package utils;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;}}
阅读全文
0 0
- 装饰者模式的应用
- 装饰模式的应用
- 装饰模式的应用
- java io 装饰者模式的应用
- 装饰者模式的简单应用
- Java 装饰模式的应用
- 装饰者模式实际应用
- 装饰者模式及其应用
- 装饰者模式及其应用
- 装饰者模式在Android上的应用 之 Context
- 装饰者模式的应用——InputStream
- Cocos2d-x中应用装饰者模式
- 装饰者模式的由来
- java的装饰者模式
- 装饰者模式的分析
- javaIO的装饰者模式
- 设计模式的应用场景(9)--装饰模式
- 《架构模式应用 ● 设计模式》之装饰者
- 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件
- RGB与CMYK色彩模式
- xuptoj 1127: 汽水瓶
- 文件上传
- Mac 使用apache
- 装饰者模式的应用
- 高质量编程读书笔记之类和对象
- 三层架构和事务
- 众创空间如何提高会议室利用效率?会议室微信预约系统
- Docker Machine 概貌
- HDU-2955-Robberies(01背包)
- accumulate算法函数求和示例
- 英文邮件
- RecyclerView的使用