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;
}
}
- JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用
Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...
- javabean以及内省技术详解(转)
一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...
- Javaweb学习笔记——(十二)——————JSP指令:page指令、include指令、taglib指令,JavaBean,内省,EL表达式
JSP指令JSP指令分类 JSP有三大指令: *page指令 *include指令 *taglib指令 在JSP中没有任何指令是必须的. 但基本上每个JSP都是使用page指令============ ...
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...
- javabean的内省技术和BeanUtils的使用
一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...
- Java反射之对JavaBean的内省操作
上一篇我们说了Java反射之数组的反射应用 这篇我们来模拟实现那些javabean的框架(BeanUtils)的基本操作. [一] 什么是JavaBean JavaBean 是一种JAVA语言写成的可 ...
- javabean的内省(Introspector)
内省是 Java 语言对 Bean 类属性.事件的一种缺省处理方法.例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值. 通过 getName/ ...
- 对javabean的内省操作
import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...
- jsp 以及javabean内省技术
l JSP l JavaBean及内省 l EL表达式 1.1 上次课内容回顾 会话技术: Cookie:客户端技术.将数据保存在客户端浏览器上.Cookie是有大小和个数的限制. Session:服 ...
随机推荐
- 通过共享用户ID来实现多个应用程序使用同一个进程(一些情况的测试)
从很多方面来看,每个Android 应用程序都存在于它自己的世界之中:• 默认情况下,每个应用程序均运行于它自己的Linux 进程中.当应用程序中的任意代码开始执行时,Android 启动一个进程,而 ...
- 黄聪:Dsicuz x2.5、X3、X3.2如何去掉域名后面的/forum.php
Dsicuz x2.5去掉域名后面的/forum.php 1, 后台--全局--域名设置--应用域名--设置默认域名为访问域名就可以,如:www.xxxxx.com 上面2种方法都可以去掉域名后面的/ ...
- silverlight 报 System.NullReferenceException 未将对象引用设置到对象的实例。
在 Microsoft.Windows.Design.Platform.SilverlightMetadataContext.SilverlightXamlExtensionImplementatio ...
- 一个超级简单的HTML模板框架源代码以及使用示例
HTML模板框架源代码 var HtmlTemplate = (function () { function HtmlTemplate(htmlSource) { this.htmlSource = ...
- Java中的String与常量池
string是java中的字符串.String类是不可变的,对String类的任何改变,都是返回一个新的String类对象.下面介绍java中的String与常量池. 1. 首先String不属于8种 ...
- 测试相关、sdk卡读取
测试: monkey 猴子 测试整个系统 adb shell monkey -v 1000 (-v 指定模拟测试的事件数量) 测试某个程序 adb shell monkey -p <程序的包名& ...
- Java注解处理器--annotation学习四
Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...
- eclipse ide for java ee developers 开发环境搭建(j2ee)
转载自:http://www.iteye.com/topic/982182 真的是一片很不错的文章啊! 使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指 ...
- 在windows下使用linux命令
<转:http://www.cnblogs.com/adgnat/archive/2011/07/16/2108098.html> 使用过linxu的伙计估计都会喜欢上linux各种各样强 ...
- mysql 怎么登录
mysql -uroot -p回车后,输入密码,再回车即可.如果自己没有修改的话,默认密码为空.