首页 > 代码库 > 包装 request Demo

包装 request Demo

 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         @Override10         public String getParameter(String name) {//返回单个参数11             String value=http://www.mamicode.com/req.getParameter(name);12             if(req.getMethod().equals("GET"))13             {14                 try {15                     value=http://www.mamicode.com/new String(value.getBytes("ISO-8859-1"),"UTF-8");16                 } catch (UnsupportedEncodingException e) {17                     e.printStackTrace();18                 }19             }20             return value;21         }22         23         @Override24         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         @Override46         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。

 

包装 request Demo