Request--BeanUtils工具类

简化的是登录逻辑2,3
package cn.itcast.web.servlet;
import cn.itcast.dao.UserDao;
import cn.itcast.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;
/**
* @author 旗木五五开
* @create 2020-03-03 17:43
*/
@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封装loginuser对象
try {
BeanUtils.populate(loginuser,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 4.调用UserDao的login方法,匹配数据库里的数据-----------------------------------
UserDao dao = new UserDao();
User user = dao.login(loginuser);
// 5.判断user
if (user == null) {
// 登录失败,跳转到failServlet
req.getRequestDispatcher("/failServlet").forward(req, resp);
} else {
// 登录成功
// 1.存储数据,起名user,值就是user这个对象
req.setAttribute("user", user);
// 2.转发
req.getRequestDispatcher("/successServlet").forward(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
BeanUtils用于封装JavaBean的
JavaBean:标准的Java类
JavaBean的要求
1.类必须被public修饰
2.必须提供空参的构造器
3.成员变量必须使用private修饰
4.提供公共的setter和getter方法
JavaBean:功能
对应数据库的表,封装数据
概念:
成员变量:方法外的变量
属性:在JavaBean中,set或者get方法后面的单词,首字母改成小写就是其属性之一
setter和getter方法截取后的产物。操作的是实体类的属性值,而不是成员

第一个截取动作去除get或者set, 第二步首字母小写
属性大多数就合成员变量名称一样,也可以不一样

验证
package cn.itcast.domain;
/**
* @author 旗木五五开
* @create 2020-03-01 15:22
* 用户的实体类
*/
public class User {
private int id;
private String username;
private String password;
private String gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
//-----------------------------------------hehe属性操作gender
public String gethehe() {
return gender;
}
public void sethehe(String gender) {
this.gender = gender;
}
//-----------------------------------------
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
package cn.itcast.test;
import cn.itcast.domain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
/**
* @author 旗木五五开
* @create 2020-03-03 19:03
*/
public class BeanUtilsTest {
@Test
public void test(){
User user =new User();
try {
// gender是成员变量的名称,设置成员变量的值为male
BeanUtils.setProperty(user,"gender","male");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
// 如果打印出来有值说明操作的是成员变量,没有值操作的就不是成员变量,而是属性hehe
System.out.println(user);
}
}

修改代码,设置呵呵
package cn.itcast.test;
import cn.itcast.domain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
/**
* @author 旗木五五开
* @create 2020-03-03 19:03
*/
public class BeanUtilsTest {
@Test
public void test(){
User user =new User();
try {
// hehe
BeanUtils.setProperty(user,"hehe","male");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(user);
}
}

这时候成员变量是gender,而属性是hehe。所以setget操作的是属性不是成员变量,得到的结果也是属性的结果
方法:
1.setProperty()设置属性值

package cn.itcast.test;
import cn.itcast.domain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
/**
* @author 旗木五五开
* @create 2020-03-03 19:03
*/
public class BeanUtilsTest {
@Test
public void test(){
User user =new User();
try {
BeanUtils.setProperty(user,"username","zhangsan");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(user);
}
}
2.getProperty()获取属性值
package cn.itcast.test;
import cn.itcast.domain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
/**
* @author 旗木五五开
* @create 2020-03-03 19:03
*/
public class BeanUtilsTest {
@Test
public void test(){
User user =new User();
try {
// setProperty------------------------------
BeanUtils.setProperty(user,"hehe","male");
// getProperty----------------------------------
BeanUtils.getProperty(user,"hehe");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
System.out.println(user);
}
}

3.populate(Object obj,Map map)将map集合键值对信息,封装到对应的JavaBean对象中。键当做属性的名称,把值当做JavaBean对应的属性值
今天比昨天晚,却比明天早


浙公网安备 33010602011771号