BeanUtils的基本使用

362 阅读2分钟

这篇文章是对上一篇文章的一个功能上的改善。

链接: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的

  1. JavaBean:标准的Java类
    1. 要求:
      • 类必须被public修饰
      • 必须提供空参的构造器
      • 成员变量必须使用private修饰
      • 提供公共setter和getter方法
    2. 功能:封装数据
  2. 概念:
    1. 成员变量
    2. 属性:setter和getter方法截取后的产物
      • 例如:getUsername() --> Username--> username
  3. 方法:
    • 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);
    }
}