servlet利用拦截器改写request和response
来源:互联网 发布:孝子之至 莫大乎尊亲 编辑:程序博客网 时间:2024/06/08 17:58
这些天在对一个项目进行二次开发,要对输入和输出的数据做一些修改,但是上一个开发人员没有进行良好的封装,所有数据直接从request.getParameter(),获取,然后response.getWrite()直接进行输出操作,如果我要一个一个程序去修改的话,应用程序上40多个servlet都得改程序,第一工作量比较大,第二自己看着恶心,以后出了问题BOSS还得找我,所以干脆想了个办法,利用拦截器继承改写request和response,这样所有进入应用程序的数据都在我的掌控下了。具体实现见如下代码!
1.web.xml的拦截器配置
<filter> <filter-name>changeResponseFilter</filter-name> <filter-class>*.filter.ChangeResponseFilter</filter-class> </filter> <filter-mapping> <filter-name>changeResponseFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping>
2.拦截器实现
package com.bjfulei.robo.machine.filter;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;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.HttpServletResponse;import com.bjfulei.robo.machine.util.ThreeDES;import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;import BO.inter.param.InGeneralParam;import BO.systools.ListMgr;import net.sf.json.JSONObject;/**** Title:ChangeResponseFilter.java* Description: * Company: www.bjfulei.com.cn* author: mingliang* mail: 996036006@qq.com* date: 2016年8月23日 下午6:54:58 */public class ChangeResponseFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {MyResponseWrapper responseWrapper = new MyResponseWrapper((HttpServletResponse) response);MyRequestWrapper requestWrapper = new MyRequestWrapper((HttpServletRequest) request);chain.doFilter(requestWrapper, responseWrapper);MyWriter writer = responseWrapper.getMyWriter();if (writer != null) {String content = writer.getContent();response.getWriter().write(ListMgr.string2Unicode2(<span style="font-family: Arial, Helvetica, sans-serif;">content</span>));response.getWriter().flush();response.getWriter().close();}}public void init(FilterConfig arg0) throws ServletException {}}
3.request改写类
package com.bjfulei.robo.machine.filter;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class MyRequestWrapper extends HttpServletRequestWrapper {private Map<String,String> paramMap;public MyRequestWrapper(HttpServletRequest request) {super(request);paramMap =getParameterMap(request);}/** * FIXME 修改后的获取参数方法 * @param name * @return */public String getParameter(String name){return paramMap.get(name);}/** * FIXME 修改参数值的方法 * @param name * @return */public String updateParameter(String name,String value){return paramMap.put(name,value);}public Map<String,String> getParameterMap(){return paramMap;}@SuppressWarnings("rawtypes")public static Map<String,String> getParameterMap(HttpServletRequest request) { // 参数Map Map properties = request.getParameterMap(); // 返回值Map Map<String,String> returnMap = new HashMap<String,String>(); Iterator entries = properties.entrySet().iterator(); Map.Entry entry; String name = ""; String value = ""; while (entries.hasNext()) { entry = (Map.Entry) entries.next(); name = (String) entry.getKey(); Object valueObj = entry.getValue(); if(null == valueObj){ value = ""; }else if(valueObj instanceof String[]){ String[] values = (String[])valueObj; for(int i=0;i<values.length;i++){ value = values[i] + ","; } value = value.substring(0, value.length()-1); }else{ value = valueObj.toString(); } returnMap.put(name, value); } return returnMap;}}
4.response改写类
package com.bjfulei.robo.machine.filter;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;public class MyResponseWrapper extends HttpServletResponseWrapper {private MyWriter myWriter;public MyResponseWrapper(HttpServletResponse response) {super(response);try {myWriter = new MyWriter(response.getWriter());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic PrintWriter getWriter() throws IOException {return myWriter;}public MyWriter getMyWriter() {return myWriter;}}
package com.bjfulei.robo.machine.filter;import java.io.PrintWriter;public class MyWriter extends PrintWriter{private StringBuilder buffer;public MyWriter(PrintWriter out) {super(out);buffer = new StringBuilder();}@Overridepublic void write(char[] buf, int off, int len) {// super.write(buf, off, len);char[] dest = new char[len];System.arraycopy(buf, off, dest, 0, len);buffer.append(dest);}@Overridepublic void write(char[] buf) {super.write(buf);}@Overridepublic void write(int c) {super.write(c);}@Overridepublic void write(String s, int off, int len) {super.write(s, off, len);}@Overridepublic void write(String s) {//super.write(s);buffer.append(s);}public String getContent(){return buffer.toString();}public void flush(){ }public void close(){ }}
利用拦截器实现了所有输入输出数据流的自定义,分享到博客来,希望对新手有所帮助!
0 0
- servlet利用拦截器改写request和response
- Servlet:response和request
- servlet中的request和response
- Servlet获取Request和Response
- Servlet中的Response和Request
- Servlet中的Request和Response
- CXF 拦截器预处理request、response消息
- CXF 拦截器预处理request、response消息
- CXF 拦截器预处理request、response消息
- CXF 拦截器预处理request、response消息
- servlet request和response的模拟单元测试
- Servlet中Request和Response 详解
- servlet处理request和response中文乱码
- servlet中response,request和编码问题
- Servlet---Request和Response的用法演示
- 8 servlet的入门request和response
- Servlet详解(二):request和response对象
- Servlet中Request和Response对象总结
- SSH中后端获取到的数据传向页面显示
- C语言基础知识
- APP二次启动问题
- BZOJ1110: [POI2007]砝码Odw
- 集成学习实践(sklearn)
- servlet利用拦截器改写request和response
- pycharm——快捷键、常用设置、配置管理
- UICollectionView基础
- 剑指Offer_45_扑克牌顺子
- angularjs的自定义directive指令的绑定策略scope:”@”、”=”、”&”
- JavaScript 中的 this !
- react native中如何查找realm默认的文件default.realm
- Why is epoll faster than select?
- 关于UI控件transform属性的介绍