文章目录
apache BeanUtils工具类简介
- BeanUtils是什么?
BeanUtils 是 Apache commons组件的成员之一 - 有什么用?
主要用于简化JavaBean封装数据的操作。
BeanUtils主要方法
方法 | 描述 |
---|---|
populate(Object bean, Map<String,String[]>properties) | 将Map数据封装到指定Javabean中,一般用于将表单的所有数据封装到javabean |
setProperty(Object obj,String name,Object value) | 设置属性值 |
getProperty(Object obj,String name) | 获得属性值 |
BeanUtils的环境配置
使用BeanUtils第三方工具,需要导入jar包:
在WEB-INF下创建lib目录,将jar包导入
选定jar包通过add As Library将外部jar包添加到idea项目中
添加成功可以通过ctrl+alt+shift+s
快捷键打开Project Structrue的Libraries查看和删除
接下来就是看用BeanUtils和不用的区别了
共同页面
<html>
<head>
<title>登录界面</title>
</head>
<body>
<h3>post请求</h3>
<form action="body" method="post">
<table>
<tr>
<td>账号:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr align="center"><input type="submit" value="登录"></tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" name="hobbys" value="敲代码"/>敲代码
<input type="checkbox" name="hobbys" value="写博客"/>写博客
<input type="checkbox" name="hobbys" value="看底层"/>看底层
<input type="checkbox" name="hobbys" value="学操作"/>学操作
</td>
</tr>
<tr>
<td>性别:</td>
<td>
<input type="radio" value="男" name="sex"/>男
<input type="radio" value="女" name="sex"/>女
</td>
</tr>
</table>
</form>
</body>
</html>
创建bean类User对象
这里的User对象的属性名和页面对应的name值要一致,因为BeanUtils通过反射实现,通过get、set方法,如果名称不一样会找不到
public class User {
//使用BeanUtils需要这个属性名和页面对应输入的name属性名一致
private String username;
private String password;
private String[] hobbys;
private String sex;
//省略构造方法 getter、setter方法
}
编写servlet – 没有用BeanUtils工具写
@WebServlet("/BeanutilsServlet")
public class BeanutilsServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//没有使用BeanUtils ,写得很麻烦 ,一个一个地获取,再一个一个的设置
//设置编码
request.setCharacterEncoding("UTF-8");
User user = new User();
//1.获取所有的参数
Map<String, String[]> map = request.getParameterMap();
//2.赋值给一个User对象
String[] usernames = map.get("username");
user.setUsername(usernames[0]);
String[] passwords = map.get("password");
user.setPassword(passwords[0]);
String[] hobbies = map.get("hobbys");
user.setHobbys(hobbies);
String[] sexes = map.get("sex");
user.setSex(sexes[0]);
//将user对象显示到浏览器上
System.out.println(user);
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(user.toString().getBytes());
}
}
用BeanUtils写
而如果用Beanutils就非常简单了,它帮我们自动封装类,就是bean类对应的属性名和页面输入的name值要一对一对应
@WebServlet("/BeanutilsServlet")
public class BeanutilsServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//没有使用BeanUtils ,写得很麻烦 ,一个一个地获取,再一个一个的设置
//设置编码
request.setCharacterEncoding("UTF-8");
User user = new User();
//获取所有的参数
Map<String, String[]> map = request.getParameterMap();
try {
//参1、对应的javabean对象 参2 从浏览器读取到的参数key-value的map值
BeanUtils.populate(user,map);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(user);
//将user对象显示到浏览器上
System.out.println(user);
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(user.toString().getBytes());
}
}
最终显示效果
个人总结
BeanUtils真的是一个非常好用的东西,他直接将表单的对象封装成bean供我们使用,特别是对于那种一堆属性的bean来说,它极大的减少了我们的开发代码量。
别看我现在写的好像减少的代码不多,但是如果是那种大量属性的(比如:医院病历单等等大量属性)的bean来说,这样可以大量减少我们开发量。
注意:这里面的bean对应的属性名要与页面的name值对应,不然BeanUtils通过反射的get、set会找不到对应的属性值