BeanUtils入门

BeanUtils入门

基本概述

BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。

PS:下载地址:https://github.com/apache/commons-beanutils/

常用API

BeanUtils工具常用工具类有两个:BeanUtils、ConvertUtils。BeanUtils用于封装数据,ConvertUtils用于处理类型转换,常用API如下:

null方法描述
BeanUtils对象populate(Object bean, Map<String,String[]> properties)将Map数据封装到指定Javabean中,一般用于将表单的所有数据封装到javabean
ConvertUtilsregister(Converter converter, Class clazz)注册类型转换器

封装表单提交基本步骤

创建JavaBean

package com.pc.domain;

import java.util.Date;

/**
 * 用户Bean
 * 
 * @author Switch
 * @data 2016年10月11日
 * @version V1.0
 */
public class User {
    private Integer id;
    private String userName;
    private String password;
    private String sex;
    private String hobby;
    private Date birthday;

    // 无参构造方法
    public User() {
    }

    // 设置器和获取器
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", sex=" + sex + ", hobby="
                + hobby + ", birthday=" + birthday + "]";
    }

}

Servlet获取表单数据

表单
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset=UTF-8">
        <title>注册页面2</title>
    </head>
    <body>
        <div align="center" style="position: relative; top: 100px;">
            <form action="TestBeanServlet" method="post">
                用户名:<input type="text" name="userName" /><br />
                密码:<input type="password" name="password" /><br />
                性别:<input type="radio" name="sex" value="男" /><input type="radio" name="usex" value="女" /><br />
                爱好:<input type="checkbox" name="hobby" value="蹦迪" />蹦迪
                <input type="checkbox" name="hobby" value="攀岩" />攀岩
                <input type="checkbox" name="hobby" value="蹦极" />蹦极<br />
                生日:<input type="text" name="birthday" /><br/>
                <input type="submit" value="注册" />
            </form>
        </div>
    </body>
</html>
获取表单数据
package com.pc.beanutils;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 测试BeanUtils工具
 * 
 * @author Switch
 * @data 2016年10月11日
 * @version V1.0
 */
public class TestBeanServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        // 获取表单数据集
        Map<String, String[]> formMap = request.getParameterMap();

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

编写工具类

package com.pc.utils;

import java.util.Date;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;

/**
 * Bean封装工具类
 * 
 * @author Switch
 * @data 2016年10月11日
 * @version V1.0
 */
public class MyBeanUtils {
    public static <T> T populate(Class<T> beanClass, Map<String, String[]> props) throws Exception {
        // 使用反射创建实例
        T bean = beanClass.newInstance();
        // 创建BeanUtils提供的时间转换器
        DateConverter dateConverter = new DateConverter();
        // 设置转换格式
        dateConverter.setPatterns(new String[] { "yyyy-MM-dd", "yyyy/MM/dd", "yyyyMMdd" });
        // 注册转换器
        ConvertUtils.register(dateConverter, Date.class);
        // 封装数据
        BeanUtils.populate(bean, props);
        return bean;
    }
}

测试转换工具

package com.pc.beanutils;

import java.io.IOException;
import java.util.Arrays;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.pc.domain.User;
import com.pc.utils.MyBeanUtils;

/**
 * 测试BeanUtils工具
 * 
 * @author Switch
 * @data 2016年10月11日
 * @version V1.0
 */
public class TestBeanServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            response.setContentType("text/html;charset=utf-8");
            request.setCharacterEncoding("utf-8");
            // 获取表单数据集
            Map<String, String[]> formMap = request.getParameterMap();
            // 封装数据
            User user = MyBeanUtils.populate(User.class, formMap);
            // 处理特殊数据类型
            String[] hobbies = request.getParameterValues("hobby");
            // 将其转换为hobby1,hobby2,hobby3这样的String
            String hobby = Arrays.toString(hobbies).substring(1, Arrays.toString(hobbies).length() - 1);
            user.setHobby(hobby);
            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

测试

界面

结果

PS:GitHub:https://github.com/Switch-vov/servlet-request-test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值