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对应的属性值

 

posted @ 2020-03-03 21:12  风萧萧路漫漫  阅读(291)  评论(0)    收藏  举报
// 改变博客标题
浏览器标题切换
浏览器标题切换end