这篇文章是对上一篇文章的一个功能上的改善。
链接:JavaWeb入门案例--模拟登录 - 掘金 (juejin.cn)
//2、获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//3、封装user对象
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);
现在只有两个用户,进行操作还不是很麻烦。
但若是有几十上百个用户需要获取和封装,那么这个问题就迫在眉睫了。
现在我们希望一次将所有的参数获取到,并且通过一个方法一次把数据封装为一个对象。此时的BeanUtils工具类就可以帮助到我们。
BeanUtils工具类:简化数据封装,用于封装JavaBean的
- JavaBean:标准的Java类
- 要求:
- 类必须被public修饰
- 必须提供空参的构造器
- 成员变量必须使用private修饰
- 提供公共setter和getter方法
- 功能:封装数据
- 要求:
- 概念:
- 成员变量
- 属性:setter和getter方法截取后的产物
- 例如:getUsername() --> Username--> username
- 方法:
- setProperty():设置属性值
- getProperty():获取属性值
- populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
使用BeanUtils工具类需要导入commons-beanutils.jar
修改之后的LoginServlet.java代码
package com.sun.web.servlet;
import com.sun.dao.UserDao;
import com.sun.domain.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.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、设置编码
req.setCharacterEncoding("UTF-8");
/*//2、获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//3、封装user对象
User loginUser = new User();
loginUser.setUsername(username);
loginUser.setPassword(password);*/
//2、获取所有请求参数
Map<String, String[]> map = req.getParameterMap();
//3、创建User对象
User loginUser = new User();
//3.2使用BeanUtils封装
try {
BeanUtils.populate(loginUser,map);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
//4、调用userDao的login方法
UserDao dao = new UserDao();
User user = dao.login(loginUser);
//判断user
if (user == null){
//登录失败,跳转到failServlet
req.getRequestDispatcher("/failServlet").forward(req,resp);
} else {
//登录成功,跳转successServlet
//存储数据
req.setAttribute("user",user);
//转发
req.getRequestDispatcher("/successServlet").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}