请求参数封装到JavaBean从入门到精通

来源:互联网 发布:sql server 基础语法 编辑:程序博客网 时间:2024/06/06 07:34

Web开发中,客户端提交的请求参数进行封装:主要两种方式一种是借助javase类中的PropertyDescriptor,另一种方法是借助第三方框架beanutils。
封装Demo如下:

package com.itheima.request;import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.io.IOException;import java.io.PrintWriter;import java.lang.reflect.Method;import java.util.Enumeration;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils;import com.itheima.domain.User;/*GET方式:    URI?username=abc&password=123  username和password就是请求参数POST方式:  请求正文中  username=abc&password=123 */public class RequestDemo3 extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        try {            test7(request, response);        } catch (Exception e) {            e.printStackTrace();        }    }    //实际开发中怎么玩:封装对象  借助第三方开发包  BeanUtils 终极版    private void test7(HttpServletRequest request, HttpServletResponse response)            throws IOException, Exception {        User user = new User();        System.out.println("封装前:"+user);        //表单的字段名和User中的属性名一致        BeanUtils.populate(user, request.getParameterMap());        System.out.println("封装后:"+user);    }    //实际开发中怎么玩:封装对象  借助第三方开发包  BeanUtils    private void test6(HttpServletRequest request, HttpServletResponse response)            throws IOException, Exception {        User user = new User();        System.out.println("封装前:"+user);        //表单的字段名和User中的属性名一致        Map<String,String[]> map = request.getParameterMap();//key:表单中input的name  value:请求参数的值数组        for(Map.Entry<String, String[]> me:map.entrySet()){            String paramName = me.getKey();            String paramValues[] = me.getValue();            BeanUtils.setProperty(user, paramName, paramValues);//调用对应的setter方法        }        System.out.println("封装后:"+user);    }           //实际开发中怎么玩:封装对象(技术点:反射+内省)  参考:java基础加强    private void test5(HttpServletRequest request, HttpServletResponse response)            throws IOException, Exception {        User user = new User();        System.out.println("封装前:"+user);        //表单的字段名和User中的属性名一致        Map<String,String[]> map = request.getParameterMap();//key:表单中input的name  value:请求参数的值数组        for(Map.Entry<String, String[]> me:map.entrySet()){            String paramName = me.getKey();            String paramValues[] = me.getValue();            //调用User中对应的写属性:比如当前username,需要调用setUsername(paramValues);            PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);//属性描述器:就是得getter或setter方法的类            Method method = pd.getWriteMethod();// setter方法            if(paramValues!=null){                if(paramValues.length==1){                    method.invoke(user, paramValues);//有一个数组(参考反射main方法)                }else{                    method.invoke(user, (Object)paramValues);                }            }        }        System.out.println("封装后:"+user);    }           //实际开发中怎么玩:封装对象(技术点:反射+内省)  参考:java基础加强    private void test4(HttpServletRequest request, HttpServletResponse response)            throws IOException, Exception {        User user = new User();        System.out.println("封装前:"+user);        //表单的字段名和User中的属性名一致        Enumeration e = request.getParameterNames();        while(e.hasMoreElements()){            String paramName = (String) e.nextElement();//每一个form中的input域的name  和User中的属性一致            String paramValues[] = request.getParameterValues(paramName);            //调用User中对应的写属性:比如当前username,需要调用setUsername(paramValues);            PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);//属性描述器:就是得getter或setter方法的类            Method method = pd.getWriteMethod();// setter方法            if(paramValues!=null){                if(paramValues.length==1){                    method.invoke(user, paramValues);//有一个数组(参考反射main方法)                }else{                    method.invoke(user, (Object)paramValues);                }            }        }        System.out.println("封装后:"+user);    }       //获取所有的请求参数    private void test3(HttpServletRequest request, HttpServletResponse response)            throws IOException {        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        Enumeration e = request.getParameterNames();//获取所有请求参数名        while(e.hasMoreElements()){            String paramName = (String)e.nextElement();//请求参数名            String values [] = request.getParameterValues(paramName);            out.write(paramName+"=");            for(String v:values){                out.write(v+",");            }            out.write("<br/>");        }    }       //为什么返回的是String或String[]:用户的所有输出都是字符串    //获取重名的请求参数    private void test2(HttpServletRequest request, HttpServletResponse response)            throws IOException {        String passwords[] = request.getParameterValues("password");        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        for(String p:passwords)            out.write(p+"<br/>");    }    //获取单一的请求参数:重名的特例    private void test1(HttpServletRequest request, HttpServletResponse response)            throws IOException {        String username = request.getParameter("username");        String password = request.getParameter("password");        String code = request.getParameter("code");        response.setContentType("text/html;charset=UTF-8");        PrintWriter out = response.getWriter();        out.write(username+":"+password+":"+code);    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }}
原创粉丝点击