JavaBean和BeanUtils

JavaBean:

是-种特殊的Java类 ,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中 ,这种JavaBean的实例对象通常称之为值对象( Value object,简称V0).

这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过- -些相应的方法来访问。 .

BeanUtils:

演示用eclipse如何加入jar包,先只是引入beanutils包,等程序运行出错后再引入logging包。

在前面内省例子的基础上,用BeanUtils类先get原来设置好的属性,再将其set为一个新值。

get属性时返回的结果为字符串, set属性时可以接受任意类型的对象,通常使用字符串。

练习

根据Servlet中获取的参数列表 ,自动反射出相对应的Bean对象:

public class User {
    private String uname;
    private String upass;
    private String usex;
    private int uage;

    public int getUage() {
        return uage;
    }

    public void setUage(int uage) {
        this.uage = uage;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpass() {
        return upass;
    }

    public void setUpass(String upass) {
        this.upass = upass;
    }

    public String getUsex() {
        return usex;
    }

    public void setUsex(String usex) {
        this.usex = usex;
    }

    @Override
    public String toString() {
        return "User [uage=" + uage + ", uname=" + uname + ", upass=" + upass
                + ", usex=" + usex + "]";
    }

}
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
public class MyBeanUtils {
    /**
     *
     * @param obj,要封装的对象
     * @param request,保存了数据的请求对象
     * @throws IntrospectionException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     */
    public static void populate(Object obj, HttpServletRequest request) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        Class clz = obj.getClass();
        //得到所有请求参数的map集合,key是参数名,value是参数值
        Map map = request.getParameterMap();
        Set set = map.entrySet();
        Iterator it = set.iterator();
        while(it.hasNext()) {
            Map.Entry entry = (Entry) it.next();
            String propertyName = (String) entry.getKey();//uname
            String[] temp = (String[]) entry.getValue();//aa

            //内省
            PropertyDescriptor pd = new PropertyDescriptor(propertyName, clz);
            Method method = pd.getWriteMethod();//setUame
            Object propertyValue = null;
            if(pd.getPropertyType()==int.class)
                propertyValue = Integer.parseInt(temp[0]);
            else if(pd.getPropertyType()==String.class)
                propertyValue = temp[0];

            method.invoke(obj, propertyValue);
        }
    }
}
import com.kangcong.zy3.demo3.bean.User;
import com.kangcong.zy3.demo3.util.MyBeanUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.beans.IntrospectionException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;



public class RegServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 编码
        request.setCharacterEncoding("utf-8");
        // 获取请求参数
        User user = new User();
        // user.setUname(request.getParameter("uname"));
        // user.setUpass(request.getParameter("upass"));
        // user.setUsex(request.getParameter("usex"));

        //将请求参数的值自动封装到对应的bean对象中
        try {
            MyBeanUtils.populate(user, request);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IntrospectionException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        // 处理请求
        System.out.println(user);
        // 响应
    }


}

你才十七八岁,你可以成为任何你想成为的人! ! !

原文地址:https://www.cnblogs.com/KcBlog/p/13549625.html