zoukankan      html  css  js  c++  java
  • 包装 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。

  • 相关阅读:
    bzoj3946
    bzoj3065
    bzoj1500
    bzoj1233
    bzoj1089
    bzoj1087
    bzoj1086
    if语句之猜拳
    if语句判断闰年、平年
    if语句判断身高体重是否标准
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4121208.html
Copyright © 2011-2022 走看看