zoukankan      html  css  js  c++  java
  • 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);
            // 响应
        }
    
    
    }

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

  • 相关阅读:
    理解JavaScript的数值型数据类型
    The First Article
    DOS符号转义(转 http://www.robvanderwoude.com/escapechars.php)
    symfony中doctrine常用属性
    Node中的promise简说及入门
    DOM操作三
    DOM操作二
    DOM操作一
    JavaScript算法题(二) && 数组filter使用
    简说 call() 、apply() 、bind()
  • 原文地址:https://www.cnblogs.com/KcBlog/p/13549625.html
Copyright © 2011-2022 走看看