内省和BeanUtils框架2

内省和BeanUtils框架封装请求参数到JavaBean中的原理
          注: 需要jar包: commons-beanutils-1.8.3.jar和commons-logging-1.1.1.jar
          *********************************************************************************************
          
          public class User {
                  private String username;
                  private String[] password;
                  private String gender;                  
                  public String getGender() {
                          return gender;
                  }
                  public void setGender(String gender) {
                          this.gender = gender;
                  }
                  public String getUsername() {
                          return username;
                  }
                  public void setUsername(String username) {
                          this.username = username;
                  }
                  public String[] getPassword() {
                          return password;
                  }
                  public void setPassword(String[] password) {
                          this.password = password;
                  }
                  @Override
                  public String toString() {
                          return "User [gender=" + gender + ", password="
                              + Arrays.toString(password) + ", username=" + username + "]";
                  }           
          }          
          
          *********************************************************************************************
          
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
                <head>
                  <title>Regist.html</title>           
                  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
                  <meta http-equiv="description" content="this is my page">
                  <meta http-equiv="content-type" content="text/html; charset=UTF-8">            
                  <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
                </head>
                <body>
                        <form action="/day07/servlet/RequestDemo3" method="post">
                                用户名: <input type="text" name="username"> <br/><br/>
                                密码:    <input type="password" name="password"> <br/><br/>
                                重复密码:<input type="password" name="password"/><br/><br/>
                                性别: <input type="text" name="gender"><br/><br/>
                                <input type="submit" value="注册">
                        </form>
                </body>
          </html>
          
          *********************************************************************************************         
          
          // 获取所有的参数和取值: 实际开发中应该把数据封装到javaBean中
          // 但若有多个字段,则须添加多次if判断,麻烦
          public void test1(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                      User user = new User();
                      System.out.println("封装前:" + user);


                      Enumeration e = request.getParameterNames();
                      while(e.hasMoreElements()){
                                  String paramName = (String) e.nextElement();
                                  String values[] = request.getParameterValues(paramName);
                                  if("username".equals(paramName)){
                                            user.setUsername(values[0]);
                                  }
                                if("password".equals(paramName)){
                                            user.setPassword(values);
                                }
                       } 
                        
                      System.out.println("封装后:" + user);
          }
          ---------------------------------------------------------------------------------------------------------------
          // **获取所有的参数和取值: 实际开发中应该把数据封装到javaBean中
          // 表单输入域的名称和JavaBean中的属性名称一致   且可以通过修改javaBean和html中的字段来增加字段而不必更改servlet 
          public void test2(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                      User user = new User();
                      System.out.println("封装前:" + user);


                      Enumeration e = request.getParameterNames();
                      while(e.hasMoreElements()){
                                  String paramName = (String) e.nextElement();
                                  String values[] = request.getParameterValues(paramName);
                                  try {
                                              PropertyDescriptor pd  = new PropertyDescriptor(paramName, User.class);
                                              Method m = pd.getWriteMethod(); // 得到setter方法
                                              if(!(values.length > 1))
                                                          m.invoke(user, values);
                                              else
                                                          m.invoke(user, (Object)values);
                                            } catch (Exception e1) {
                                                          e1.printStackTrace();
                                  }
                       }
                      
                      System.out.println("封装后:" + user);
           }
          ---------------------------------------------------------------------------------------------------------------
          // ***获取所有的参数和取值: 实际开发中应该把数据封装到javaBean中   该方法封装了如上方法
          public void test3(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                      User user = new User();
                      System.out.println("封装前:" + user);
                      
                      // key: 请求参数的名称 是String类型; value: 请求参数的值,是String[]类型
                      Map<String, String[]> map = request.getParameterMap();
                      for(Map.Entry<String, String[]> me:map.entrySet()){
                                  String paramName = me.getKey();
                                  String[] values = me.getValue();
                                  try {
                                              PropertyDescriptor pd = new PropertyDescriptor(paramName,User.class);
                                              Method m = pd.getWriteMethod();
                                              if(!(values.length > 1))
                                                          m.invoke(user, values);
                                              else
                                                          m.invoke(user, (Object)values);
                                            } catch (Exception e) {
                                                          e.printStackTrace();
                                  }
                      }
                      
                      System.out.println("封装后:" + user); 
          }
          ---------------------------------------------------------------------------------------------------------------
          // ***获取所有的参数和取值: 实际开发中应该把数据封装到javaBean中   最简便的方式
          // *****通用方式: 借助于BeanuTils框架,编写代码时,保持表单输入与与javaBean的属性一致即可
          public void test4(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
                      User user = new User();
                      System.out.println("封装前:" + user);
                      
                      try {
                                  // 该方法实现原理就是 test3的封装
                                  BeanUtils.populate(user, request.getParameterMap());
                      } catch (Exception e) {
                                  e.printStackTrace();
                      }
                      
                      System.out.println("封装后:" + user); 
          }
          
          
          
          
          
          
          
          
          
          
          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值