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

  • 相关阅读:
    Orchard Oracle 支持
    讽刺的是,我在linux下使用最多的命令,竟然是windows的
    学习bash
    提高分布式环境中程序启动性能的一个方法
    MQTT X v1.4.1 正式发布
    社区力量|因为 EMQ,他上了微博热搜
    不止是现在,更关注未来:EMQ 携手高校加强物联网人才培养
    EMQ 助力西安增材制造国家研究院打造增材智能车间平台
    Kuiper 1.0.1 正式发布
    MQTT X v1.4.0 正式发布
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4121208.html
Copyright © 2020-2023  润新知