request對象多種方法封裝表單數據


public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//        test1(request);
//        test2(request);
        test3(request);
    }
//獲取單個控件的值
    public void test1(HttpServletRequest request){
        String name = request.getParameter("username");
        System.out.println("name=" + name);
    }
    //獲取同名控件的值
    public void test2(HttpServletRequest request){
        String[] age = request.getParameterValues("age");
        for (String string : age) {
            System.out.println("string=" + string);
        }
    }
    //獲取全部控件
    public void test3(HttpServletRequest request){
        //獲取所有控件的名字
        System.out.println("--------request--------" + request.toString());
        Enumeration<String> enu = request.getParameterNames();
        while(enu.hasMoreElements()){
            String name = enu.nextElement();//控件的名字
            //可能有多個重復
            String[] values = request.getParameterValues(name);//控件的值
            for (String value : values) {
                System.out.println(name + "---" + value);
            }
        }
    }
//將表單中的所有值封裝到JavaBean中

 第四種方法:將表單中的所有值封裝到JavaBean中:采用PropertyDesceipt方法

 首先添加一個Javabean:實現序列化接口: implements Serializable  表示對象可以被序列化

public class User implements Serializable{

    private String username;
    private String[] password;
    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 [username=" + username + ", password="
                + Arrays.toString(password) + "]";
    } 
}

實現方法:

public void test4(HttpServletRequest request){
        User user = new User();
        Enumeration<String> enu = request.getParameterNames();
        while(enu.hasMoreElements()){
            //拿到控件的名字
            String name = enu.nextElement();
            //控件的值
            String[] values = request.getParameterValues(name);
            
            try {
                //拿到屬性name的屬性描述器
                PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
                //將值注入到屬性中
                //拿到寫描述器
                Method md = pd.getWriteMethod();
                //為了兼容jdk1.4,invoke方法在執行時將參數拆開進行傳遞,所以導致IllegalArgumentException
                if(values.length == 1){
                    md.invoke(user, values);
                }else{
            //數組被拆開了
//解決辦法1: // md.invoke(user, (Object)values); //解決辦法2: md.invoke(user, new Object[] {values}); } // md.invoke(user, values); } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("封裝后的值:"+ user); }

 第六種方法:BeanUtils類封裝

//將表單中的所有值封裝到JavaBean中,采用第三方jar進行:BeanUtils類
    //需要:commons-logging-1.1.1.jar    commons-beanutils-1.8.3.jar
    public void test5(HttpServletRequest request){
        User user = new User();
        System.out.println("封裝前:" + user);
        
        Enumeration<String> enu = request.getParameterNames();
        while(enu.hasMoreElements()){
            String name = enu.nextElement();
            String[] values = request.getParameterValues(name);
            //采用BeanUtils類封裝
            try {
                BeanUtils.setProperty(user, name, values);
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("封裝后" + user);
    }

 第七種:request.getParameterMap(); BeanUtils

//頁面所有的數據傳遞都是String類型
    public void test6(HttpServletRequest request){
        User user = new User();
        System.out.println("封裝前:" + user);
        Map<String, String[]> map = request.getParameterMap();
        
        for (Map.Entry<String , String[]> entry : map.entrySet()) {
            //拿到控件的名字
            String name = entry.getKey();
            String[] values = entry.getValue();
            //封裝數據
            try {
                BeanUtils.setProperty(user, name, values);
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        System.out.println("封裝后" + user);
    }
    

 推薦方法

    //推薦方法
    public void test7(HttpServletRequest request){
        User user  = new User();
        try {
            BeanUtils.populate(user, request.getParameterMap());
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("封裝后777" + user);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM