把表单的数据封装到JavaBean中

来源:互联网 发布:网络上的兼职可信吗 编辑:程序博客网 时间:2024/04/29 08:16

约定优于编码

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <span style="color:#ff0000;">以下是第三步:实现功能</span>package com.itheima.request;  
  2.   
  3. import java.beans.IntrospectionException;  
  4. import java.beans.PropertyDescriptor;  
  5. import java.io.IOException;  
  6. import java.io.PrintWriter;  
  7. import java.lang.reflect.Method;  
  8. import java.util.Enumeration;  
  9. import java.util.Map;  
  10.   
  11. import javax.servlet.ServletException;  
  12. import javax.servlet.http.HttpServlet;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import javax.servlet.http.HttpServletResponse;  
  15.   
  16. import org.apache.commons.beanutils.BeanUtils;  
  17.   
  18. import com.itheima.domain.User;  
  19.   
  20. /*  
  21. GET方式:    URI?username=abc&password=123  username和password就是请求参数  
  22. POST方式:  请求正文中  username=abc&password=123  
  23.   
  24.  */  
  25.   
  26. public class RequestDemo3 extends HttpServlet {  
  27.   
  28.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  29.             throws ServletException, IOException {  
  30.         try {  
  31.             test7(request, response);  
  32.         } catch (Exception e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.     }  
  36.     //实际开发中怎么玩:封装对象  借助第三方开发包  BeanUtils 终极版  
  37.     private void test7(HttpServletRequest request, HttpServletResponse response)  
  38.             throws IOException, Exception {  
  39.         User user = new User();  
  40.         System.out.println("封装前:"+user);  
  41.         //表单的字段名和User中的属性名一致  
  42.         BeanUtils.populate(user, request.getParameterMap());  
  43.         System.out.println("封装后:"+user);  
  44.     }  
  45.     //实际开发中怎么玩:封装对象  借助第三方开发包  BeanUtils  
  46.     private void test6(HttpServletRequest request, HttpServletResponse response)  
  47.             throws IOException, Exception {  
  48.         User user = new User();  
  49.         System.out.println("封装前:"+user);  
  50.         //表单的字段名和User中的属性名一致  
  51.           
  52.         Map<String,String[]> map = request.getParameterMap();//key:表单中input的name  value:请求参数的值数组  
  53.         for(Map.Entry<String, String[]> me:map.entrySet()){  
  54.             String paramName = me.getKey();  
  55.             String paramValues[] = me.getValue();  
  56.             BeanUtils.setProperty(user, paramName, paramValues);//调用对应的setter方法  
  57.         }  
  58.           
  59.         System.out.println("封装后:"+user);  
  60.     }         
  61.     //实际开发中怎么玩:封装对象(技术点:反射+内省)  参考:java基础加强  
  62.     private void test5(HttpServletRequest request, HttpServletResponse response)  
  63.             throws IOException, Exception {  
  64.         User user = new User();  
  65.         System.out.println("封装前:"+user);  
  66.         //表单的字段名和User中的属性名一致  
  67.           
  68.         Map<String,String[]> map = request.getParameterMap();//key:表单中input的name  value:请求参数的值数组  
  69.         for(Map.Entry<String, String[]> me:map.entrySet()){  
  70.             String paramName = me.getKey();  
  71.             String paramValues[] = me.getValue();  
  72.             //调用User中对应的写属性:比如当前username,需要调用setUsername(paramValues);  
  73.             PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);//属性描述器:就是得getter或setter方法的类  
  74.             Method method = pd.getWriteMethod();// setter方法  
  75.             if(paramValues!=null){  
  76.                 if(paramValues.length==1){  
  77.                     method.invoke(user, paramValues);//有一个数组(参考反射main方法)  
  78.                 }else{  
  79.                     method.invoke(user, (Object)paramValues);  
  80.                 }  
  81.             }  
  82.         }  
  83.           
  84.         System.out.println("封装后:"+user);  
  85.     }         
  86.     //实际开发中怎么玩:封装对象(技术点:反射+内省)  参考:java基础加强  
  87.     private void test4(HttpServletRequest request, HttpServletResponse response)  
  88.             throws IOException, Exception {  
  89.         User user = new User();  
  90.         System.out.println("封装前:"+user);  
  91.         //表单的字段名和User中的属性名一致  
  92.         Enumeration e = request.getParameterNames();  
  93.         while(e.hasMoreElements()){  
  94.             String paramName = (String) e.nextElement();//每一个form中的input域的name  和User中的属性一致  
  95.             String paramValues[] = request.getParameterValues(paramName);  
  96.             //调用User中对应的写属性:比如当前username,需要调用setUsername(paramValues);  
  97.             PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);//属性描述器:就是得getter或setter方法的类  
  98.             Method method = pd.getWriteMethod();// setter方法  
  99.             if(paramValues!=null){  
  100.                 if(paramValues.length==1){  
  101.                     method.invoke(user, paramValues);//有一个数组(参考反射main方法)  
  102.                 }else{  
  103.                     method.invoke(user, (Object)paramValues);  
  104.                 }  
  105.             }  
  106.         }  
  107.         System.out.println("封装后:"+user);  
  108.     }     
  109.     //获取所有的请求参数  
  110.     private void test3(HttpServletRequest request, HttpServletResponse response)  
  111.             throws IOException {  
  112.         response.setContentType("text/html;charset=UTF-8");  
  113.         PrintWriter out = response.getWriter();  
  114.         Enumeration e = request.getParameterNames();//获取所有请求参数名  
  115.         while(e.hasMoreElements()){  
  116.             String paramName = (String)e.nextElement();//请求参数名  
  117.             String values [] = request.getParameterValues(paramName);  
  118.             out.write(paramName+"=");  
  119.             for(String v:values){  
  120.                 out.write(v+",");  
  121.             }  
  122.             out.write("<br/>");  
  123.         }  
  124.     }     
  125.       
  126.     //为什么返回的是String或String[]:用户的所有输出都是字符串  
  127.       
  128.     //获取重名的请求参数  
  129.     private void test2(HttpServletRequest request, HttpServletResponse response)  
  130.             throws IOException {  
  131.         String passwords[] = request.getParameterValues("password");  
  132.         response.setContentType("text/html;charset=UTF-8");  
  133.         PrintWriter out = response.getWriter();  
  134.         for(String p:passwords)  
  135.             out.write(p+"<br/>");  
  136.     }  
  137.     //获取单一的请求参数:重名的特例  
  138.     private void test1(HttpServletRequest request, HttpServletResponse response)  
  139.             throws IOException {  
  140.         String username = request.getParameter("username");  
  141.         String password = request.getParameter("password");  
  142.         String code = request.getParameter("code");  
  143.         response.setContentType("text/html;charset=UTF-8");  
  144.         PrintWriter out = response.getWriter();  
  145.         out.write(username+":"+password+":"+code);  
  146.     }  
  147.   
  148.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  149.             throws ServletException, IOException {  
  150.   
  151.         doGet(request, response);  
  152.     }  
  153.   
  154. }  


第一步:表单的编写

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <title>用户登录</title>  
  5.       
  6.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  7.     <meta http-equiv="description" content="this is my page">  
  8.     <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
  9.       
  10.     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->  
  11.   
  12.   </head>  
  13.     
  14.   <body>  
  15.     先不要输出中文<br/>  
  16.     <form action="/day08_01_request/servlet/RequestDemo4" method="post">  
  17.         用户名:<input type="text" name="username"/><br/>  
  18.         密码:<input type="password" name="password"/><br/>  
  19.         确认密码:<input type="password" name="password"/><br/>  
  20.         验证码:<input type="text" name="code" size="3"/>  
  21.         <img id="image1" src="/day08_00_response/servlet/ResponseDemo1"/><a href="javascript:chanageImage()">看不清</a>  
  22.         <br/>  
  23.         <input type="submit" value="登录"/>  
  24.     </form>  
  25.     <script type="text/javascript">  
  26.         function chanageImage(){  
  27.             //如果地址一样,浏览器并不会发出请求  
  28.             document.getElementById("image1").src="/day08_00_response/servlet/ResponseDemo1?"+new Date().getTime();  
  29.         }  
  30.     </script>  
  31.   </body>  
  32. </html>  


第二步:JavaBean的编码

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.itheima.domain;  
  2.   
  3. import java.util.Arrays;  
  4.   
  5. //约定优于编码:  
  6. //约定:属性与表单的字段名保持一致  
  7. public class User {  
  8.       
  9.     private String username;//字段  
  10.     private String[] password;  
  11.     private String code;  
  12.     //读属性:名称:username  
  13.     public String getUsername() {  
  14.         return username;  
  15.     }  
  16.       
  17.     //写属性:名称:username  
  18.     public void setUsername(String username) {  
  19.         this.username = username;  
  20.     }  
  21.   
  22.     public String[] getPassword() {  
  23.         return password;  
  24.     }  
  25.   
  26.     public void setPassword(String[] password) {  
  27.         this.password = password;  
  28.     }  
  29.   
  30.     public String getCode() {  
  31.         return code;  
  32.     }  
  33.   
  34.     public void setCode(String code) {  
  35.         this.code = code;  
  36.     }  
  37.   
  38.     @Override  
  39.     public String toString() {  
  40.         return "User [username=" + username + ", password="  
  41.                 + Arrays.toString(password) + ", code=" + code + "]";  
  42.     }  
  43.       
  44.       
  45.       
  46. }  
0 0
原创粉丝点击