我们在写一个Java Web项目时,会用JavaBean与JSP整合的开发模式。当jsp页面是一个表单的话,会将表单数据提交给Servlet,servlet接收数据。我们一般用request.getParameter()方法获取jsp表单的数据,但是如果JavaBean的实体类中的属性值很多的时候,用这种方法就会很繁琐,表单属性太多,就会写很多request.getParameter字段,这个时候我建议用BeanUtils.copyProperties方法,会简化代码量。
BeanUtils.copyProperties(a,b)
将b的值赋给a。
下面给出个例子:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
User user = new User();
user.setName(request.getParameter("name"));
user.setSex(request.getParameter("sex"));
user.setAdress(request.getParameter("adress"));
user.setBirthday(request.getParameter("birthday"));
user.setPasswoed(request.getParameter("password"));
if (userService.register(user)){
request.setAttribute("msg","注册成功,请登录!");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}else {
request.setAttribute("msg","用户名或地址重复,请重新填写!");
request.getRequestDispatcher("/register.jsp").forward(request,response);
}
}
<c:if test="${!empty msg }">
<div class="alert alert-success">${msg }</div>
</c:if>
<form method="post" action="/RegisterServlet">
<table align="center" width="300" border="1" height="150">
<tr>
<td colspan="2" align="center"><b>注册页面</b></td>
</tr>
<tr>
<td align="right">
姓名:<input type="text" name="name" required="required"></td>
</tr>
<tr>
<td align="right">
性别:<input type="text" name="sex" required="required"></td>
</tr>
<tr>
<td align="right">
住址:<input type="text" name="adress" required="required"></td>
</tr>
<tr>
<td align="right">
生日:<input type="text" name="birthday" required="required"></td>
</tr>
<tr>
<td align="right">
密码:<input type="text" name="password" required="required"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit"/>
</td>
</tr>
</table>
</form>
这是用request.getParameter()方法获取表单信息。
我们可以对他进行改写:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user=new User();
try {
BeanUtils.copyProperties(user,request.getParameterMap());
}catch (IllegalAccessException e){
e.printStackTrace();
}catch (InvocationTargetException e){
e.printStackTrace();
}
if (userService.register(user)){
request.setAttribute("msg","注册成功,请登录!");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}else {
request.setAttribute("msg","用户名或地址重复,请重新填写!");
request.getRequestDispatcher("/register.jsp").forward(request,response);
}
}
这样代码量就会少很多。
通过第三方工具类BeanUtils的copyProperties()方法,将所有信息封装到user对象中。user对象接下来会与数据库进行交互,如:
public void addUser(User user)throws SQLException{
QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());
String sql="insert into user (name,sex,adress,birthday,password) values (?,?,?,?,?)";
runner.update(sql,user.getName(),user.getSex(),user.getAdress(),user.getBirthday(),user.getPassword());
}
综上,是BeanUtils.copyProperties方法的使用。
注意,使用BeanUtils.copyProperties方法时要导包
import org.apache.commons.dbutils.handlers.BeanHandler;
这个包我放到下面的链接:
链接:https://pan.baidu.com/s/1E6qhbWFm0_jEYyiLctgVUw
提取码:pn8k
通过BeanUtils自动将提交的数据封装到对象中,需要的jar包:
commons-beanutils-1.9.3.jar
该包需要,两个jar包的支持:
commons-collections-3.2.2.jar
commons-logging-1.2.jar
这三个包需要一起导入,否则报错!!!