在上一个用户登录案例中,当从浏览器接收参数后,还需要创建 JavaBean 类,对其的属性每一项赋值,如果属性少,可以手动完成,但是当属性非常多,这时就发现非常不方便,在这里就可以使用封装 JavaBean 的工具类。
示例:
这里的每一项都需要手动赋值,比较麻烦。
BeanUtils 工具类,它可以一次性的把所有请求的参数注入到 JavaBean中,简化数据封装,用于封装 JavaBean。
BeanUtils 工具类,经常用于把 Map 中的值注入到 JavaBean 中,或者是对象属性值的拷贝操作。
BeanUtils 是 Apache 提供的一个jar 包,使用时需要导入两个 jar 包。
commons-beanutils-1.8.0jar
commons-logging-1.1-.1.jar
注意:对于封装的数据必须是标准的 JavaBean 类
JavaBean :标准的Java类
要求:
① 类必须被 public 修饰
② 必须提供空参的构造器
③ 成员变量必须使用 private 修饰
④ 提供公共的 setter 和 getter 方法。
功能:封装数据。
在使用 BeanUtils 这个工具类,先来了解JavaBean中的成员变量和属性。
JavaBean的成员变量:就是JavaBean中用private 修饰的变量。
JavaBean的属性:setter 和 getter 方法截取后的产物。
如: getUsername() --> Username --> username(属性)
工具类中方法:
setProperty() // 根据属性来获取 JavaBean 的属性值 getProperty() // 根据属性来设置 JavaBean 的属性值 populate(Object JavaBean, Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
本质:这个工具类其实是调用 javaBean 中的对应的 setxxx() 方法来给成员进行赋值的。(切记)
还可以对这个工具类进一步封装成我们自己的工具类,使用时更加便捷。
BeanUtils 工具类(自己封装)
1 import org.apache.commons.beanutils.BeanUtils; 2 3 import java.util.Map; 4 5 public class BeanUtils { 6 7 /** 8 * 把 Map 中的值注入到对应的 JavaBean 属性中 9 * @param value 包含各种参数的 map集合 10 * @param bean 封装数据的 JavaBean对象 11 * @param <T> 泛型 12 * @return 13 */ 14 public static <T> T copyParamToBean(Map value, T bean) { 15 16 try { 17 System.out.println("注入之前:" + bean); 18 /** 19 * 把所有请求的参数都注入到 bean 对象中 20 */ 21 BeanUtils.populate(bean, value); 22 23 System.out.println("注入之后:" + bean); 24 } catch (Exception e) { 25 e.printStackTrace(); 26 } 27 28 return bean; 29 } 30 }
这样在 Servlet中封装 JavaBean 会变的更加简洁:
示例:
1 //获取所有的请求参数信息 2 Map<String, String[]> parameterMap = request.getParameterMap(); 3 4 //遍历所有的参数信息 5 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { 6 System.out.println(entry.getKey() + "=" + Arrays.asList(entry.getValue())); 7 } 8 9 //根据 Map 参数 封装成对应的 JavaBean 对象 10 User user = WebBeanUtils.copyParamToBean(parameterMap, new User()); 11 System.out.println("user = " + user);