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); // 响应 } }
你才十七八岁,你可以成为任何你想成为的人! ! !