JavaBean和内省
JavaBean是一个遵循特定的写法的java类
    1. 必须有一个无参的构造方法
    2.属性私有化
    3.私有你给的属性必须通过public类型的方法暴露给其他程序,并且方法的命名也必须遵守一定的命名规范。
 
访问JavaBean属性的两种方式
1.直接调用bean的setXXX或getXXX
2.通过内省技术访问(java bean包提供了内省的API)
   * 内省技术是基于反射技术的
   *通过Introspector类获得Bean对象的BeanInfo,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后通过反射机制来调用这些方法。
    public class User(0
    {
    private String username;
    private String password;
    public void setUsername(){}   
    }
 < jsp:useBean id="user" class ="vo.user"></ jsp:useBean>
 < jsp:setProperty property ="name" name="user"/>
  < jsp:setProperty property ="password" name="user"/>
  < jsp:getProperty property ="name" name="user" />
    <jsp:getProperty property ="password" name="user" />
 
 
 
 
自己写的使用内省的方式反射用户信息 javabean格式的用户信息
 
public void doGet(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
            // 获取输入的数据
           Map<String, String[]> map = request.getParameterMap();
           user usr = new user();
            try {
                populate(map, usr);
           } catch (Exception e) {
                e.printStackTrace();
           }
           response.getWriter().write(usr.getName());
           response.getWriter().write(usr.getPassword());
     }
 
      /**
      * 封装完整的数据 通过内省的方式封装数据
      *
      * @param map
      * @param usr
      * @throws IntrospectionException
      * @throws IllegalArgumentException
      * @throws IllegalAccessException
      * @throws InvocationTargetException
      */
      private void populate(Map<String, String[]> map, user usr)
                 throws IntrospectionException, IllegalArgumentException,
                IllegalAccessException, InvocationTargetException {
            // 获取类的信息
           BeanInfo info = Introspector.getBeanInfo(usr.getClass());
            // 获取属性列表
           PropertyDescriptor[] pds = info.getPropertyDescriptors();
            for (PropertyDescriptor pd : pds) {
                 // 获取到属性名称
                String name = pd.getName();
                 if (map.containsKey(name)) {
                      // 获取属性写的方法
                     Method m = pd.getWriteMethod();
                     m.invoke(usr, map.get(name)[0]);
                }
           }
     }
 
 
使用javabean的jar包如下:
 
 
 
 
/**
 * 使用BeanUtils操作
 *
 * @author sunyb
 *
 */
public class userBeanUtilServlet extends HttpServlet {
 
      public void doGet(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
            // 获取请求参数
           Map<String, String[]> map = request.getParameterMap();
            // 对象实例化
           user usr = new user();
 
            // 完成注册
           ConvertUtils. register((Converter) new MyDateConverter(), Date.class );
 
            // 完成封装
            try {
                BeanUtils. populate(usr, map);
           } catch (Exception e) {
                e.printStackTrace();
           }
           response.getWriter().write(usr.getName());
           response.getWriter().write(usr.getPassword());
     }
 
      public void doPost(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
 
           doGet(request, response);
 
     }
 
}
 
 
 
 
但是如果有日期时还要自己封闭一个 DateConvert处理类来用于javaBeanUtils注册当遇到 有日期格式的数据属性时,使用自己定义的类来处理
 
 
自己的类要实现接口
Converter
 
 
 
package utils;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import com.sun.org.apache.commons.beanutils.Converter;
 
public class MyDateConverter implements Converter {
 
      @Override
      public Object convert (Class clazz, Object obj) {
            // 把传入对象转换成日期,返回
           String sDate = (String) obj;
           SimpleDateFormat sdf = new SimpleDateFormat();
           Date date = new Date();
            try {
                date = (Date) sdf.parse(sDate);
           } catch (ParseException e) {
                 // TODO Auto-generated catch block
                e.printStackTrace();
           }
            return date;
     }
 
}
 
 

JavaBean和内省的更多相关文章

  1. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  2. javabean以及内省技术详解(转)

    一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...

  3. Javaweb学习笔记——(十二)——————JSP指令:page指令、include指令、taglib指令,JavaBean,内省,EL表达式

    JSP指令JSP指令分类 JSP有三大指令: *page指令 *include指令 *taglib指令 在JSP中没有任何指令是必须的. 但基本上每个JSP都是使用page指令============ ...

  4. JAVA中反射机制五(JavaBean的内省与BeanUtils库)

    内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...

  5. javabean的内省技术和BeanUtils的使用

    一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...

  6. Java反射之对JavaBean的内省操作

    上一篇我们说了Java反射之数组的反射应用 这篇我们来模拟实现那些javabean的框架(BeanUtils)的基本操作. [一] 什么是JavaBean JavaBean 是一种JAVA语言写成的可 ...

  7. javabean的内省(Introspector)

    内省是 Java 语言对 Bean 类属性.事件的一种缺省处理方法.例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值. 通过 getName/ ...

  8. 对javabean的内省操作

    import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...

  9. jsp 以及javabean内省技术

    l JSP l JavaBean及内省 l EL表达式 1.1 上次课内容回顾 会话技术: Cookie:客户端技术.将数据保存在客户端浏览器上.Cookie是有大小和个数的限制. Session:服 ...

随机推荐

  1. activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

    注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring ...

  2. Html4与Html5的关键区别

    HTML5是下一代HTML标准版本,4与5有很多相同之处,有HTML从头构建,比4升级到5要方便. 以下是10个关键区别: 1.HTML5最近很火,但是标准还在制定,4则十年之多了,不会6变: 2.简 ...

  3. DBA_Oracle海量数据处理分析(方法论)

    2014-12-18 Created By BaoXinjian

  4. redis 数据持久化

    1.快照(snapshots) 缺省情况情况下,Redis把数据快照存放在磁盘上的二进制文件中,文件名为dump.rdb.你可以配置Redis的持久化策略,例如数据集中每N秒钟有超过M次更新,就将数据 ...

  5. (转)ZooKeeper伪分布式集群安装及使用

    转自:http://blog.fens.me/hadoop-zookeeper-intro/ 前言 ZooKeeper是Hadoop家族的一款高性能的分布式协作的产品.在单机中,系统协作大都是进程级的 ...

  6. JAVA 数组实例-求学生平均成绩,与计算数组的长度

    实例: 知识点:数组名.length是计算数组的长度 import java.util.*; //求学生平均分成绩 public class Test{ public static void main ...

  7. mysql索引之四(索引使用注意规则:索引失效--存在索引但不使用索引)

    但是如果是同样的sql如果在之前能够使用到索引,那么现在使用不到索引,以下几种主要情况: 1. 随着表的增长,where条件出来的数据太多,大于15%,使得索引失效(会导致CBO计算走索引花费大于走全 ...

  8. 很好用的在线markdown编辑器

    # 欢迎使用 Cmd Markdown 编辑阅读器 基本符号 *,-,+ 3个符号效果都一样,这3个符号被称为 Markdown符号 空白行表示另起一个段落 `是表示inline代码,tab是用来标记 ...

  9. ZK框架的分析与应用

    前言:本文是在下的在学习ZK官方文档时整理出来的初稿.本来里面有很多的效果图片和图片代码的.奈何博客园中图片不能粘贴上去,所以感兴趣的筒子们就将就吧.内容中,如有不好的地方,欢迎斧正! ZK框架的分析 ...

  10. SQL查询包含汉字的行

    1.查询字段首位为汉字 2.查询字段包含汉字(任意位) SELECT * FROM 表名 WHERE 字段 LIKE '%[吖-座]%' --[吖-座]是中文字符集第一个到最后一个的范围