标签:style blog http io ar color 使用 sp for
1 //包装request,增强getParameter方法 2 class MyReq extends HttpServletRequestWrapper{ 3 private HttpServletRequest req; 4 public MyReq(HttpServletRequest req) {//构造,必须 5 super(req); 6 this.req=req; 7 } 8 9 @Override 10 public String getParameter(String name) {//返回单个参数 11 String value=req.getParameter(name); 12 if(req.getMethod().equals("GET")) 13 { 14 try { 15 value=new String(value.getBytes("ISO-8859-1"),"UTF-8"); 16 } catch (UnsupportedEncodingException e) { 17 e.printStackTrace(); 18 } 19 } 20 return value; 21 } 22 23 @Override 24 public Map getParameterMap() {//返回map参数 25 Map<String, String[]> map=req.getParameterMap(); 26 if(req.getMethod().equals("GET")) 27 { 28 Iterator<String[]> it= map.values().iterator(); 29 while(it.hasNext()) 30 { 31 String[] ss= it.next(); 32 for(int i=0;i<ss.length;i++) 33 { 34 try { 35 ss[i]=new String(ss[i].getBytes("ISO-8859-1"),req.getCharacterEncoding()); 36 } catch (UnsupportedEncodingException e) { 37 e.printStackTrace(); 38 } 39 } 40 } 41 } 42 return map; 43 } 44 45 @Override 46 public String[] getParameterValues(String name) {//String[] 参数 47 String[] values=req.getParameterValues(name); 48 if(req.getMethod().equals("GET")) 49 { 50 for(int i=0;i<values.length;i++) 51 { 52 try { 53 values[i]=new String(values[i].getBytes("ISO-8869-1"),req.getCharacterEncoding()); 54 } catch (UnsupportedEncodingException e) { 55 e.printStackTrace(); 56 } 57 } 58 59 } 60 return values; 61 } 62 63 }
代理或是包装都是对某个类的方法进行增强。
代理:必须要根据给定的接口,在内存中创建这个接口的子类。$Proxy0。
包装:不需要接口,但声明声明一个类,变成被包装类的子类,同时拥有一个被包装类的成员。
什么情况下,使用包装,什么情况下使用代理
如果官方(SUN)提供了包装类适配器,则应该优先使用包装。如HttpServletRequest,它的包装类就是HtpServletRequestWraper.
如果官方没有提供包装类的适配器,则可以使用动态代理。如Connection。
标签:style blog http io ar color 使用 sp for
原文地址:http://www.cnblogs.com/liuwt365/p/4121208.html