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 |
ConvertUtils | register(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