apache BeanUtils工具类与传统方式的区别
-
BeanUtiles是什么?
BeanUtile是Apache commons组件的成员之一
-
有什么用?
主要用于简化JavaBean封闭数据的操作。
使用第三方工具,需要导入jar包
比如现在要获取jsp页面表单的值:
jsp页面代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form method="post" action="/Day04_war_exploded/demo04Servlet">
账号: <input type="text" name="username"><br>
密码: <input type="text" name="password"><br>
爱好: <input type="checkbox" name="hobby" value="抽烟">抽烟
<input type="checkbox" name="hobby" value="喝酒">喝酒
<input type="checkbox" name="hobby" value="烫头">烫头
<input type="submit" value="提交">
</form>
</body>
</html>
传统的servlet解决方法:
package com.lbl.servlet;
import com.lbl.bean.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
@WebServlet("/demo04Servlet")
public class Demo04Servlet 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 {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String[] hobbys = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobbys));
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setHobby(hobbys);
System.out.println(user);
}
}
User代码如下:
package com.lbl.bean;
import java.util.Arrays;
public class User {
private String username;
private String password;
private String[] hobby;
public User() {
}
public User(String username, String password, String[] hobby) {
this.username = username;
this.password = password;
this.hobby = hobby;
}
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[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", hobby=" + Arrays.toString(hobby) +
'}';
}
}
效果如下:
过于麻烦!!!
##现在我们使用apache BeanUtils工具类
- 导入上述对应jar包
- 使用 BeanUtils.populate()方法
package com.lbl.servlet;
import com.lbl.bean.User;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
@WebServlet("/demo05Servlet")
public class Demo05Servlet 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 {
request.setCharacterEncoding("utf-8");
User user = new User();
Map<String, String[]> parameterMap = request.getParameterMap();
try {
BeanUtils.populate(user,parameterMap);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(user);
}
}
效果图:
底层原理
获取key生成set方法
username -->setUsername
调用同名set方法给成员变量赋值(反射)
obj.setUsername(map.get(key))