包装 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         @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。

原文地址:https://www.cnblogs.com/liuwt365/p/4121208.html