jsp内省EL


内省

为什么要使用内省
开发框架时,经常需要使用Java对象属性来封装数据,如果使用反射来操作太麻烦,所以SUN公司开发了一套API,专门用来操作Java对象的属性。

访问JavaBean属性的两种方式:
直接调用bean的setXXX或getXXX方法。
通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式。
通过PropertyDescriptor类操作Bean的属性
通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
核心代码:

//1.创建对象
Class<?> class1=Class.forName("com.qf.day42.Student");
Object obj=class1.newInstance();
//2属性赋值
PropertyDescriptor pd=new PropertyDescriptor("name",class1);
Method method=pd.getWriteMethod();
method.invoke(obj, "张三");
//3属性获取
Method method2=pd.getReadMethod();
System.out.println(method2.invoke(obj, null));
BeanInfo beanInfo=Introspector.getBeanInfo(Class.forName("com.qf.day42.Student"));
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
System.out.println(pd.getName());
}

因为每次使用也都不太方便,所以Apache公司开发了一个工具包BeanUtils
通过这个工具包可以简化我们程序代码的编写。
Beanutils工具包的常用类:
- BeanUtils
- PropertyUtils
- ConvertUtils.regsiter(Converter convert, Class clazz)
自定义转换器

String name="张明";
String age="20";
String borndate="1990-1-1";
Student stu=new Student();
BeanUtils.setProperty(stu, "name", name);
BeanUtils.setProperty(stu, "age", age);
ConvertUtils.register(new DateLocaleConverter(), Date.class);
BeanUtils.setProperty(stu, "bornDate",borndate);
System.out.println(stu.toString());
ConvertUtils.register(new Converter() {

@Override
public <T> T convert(Class<T> arg0, Object arg1) {
// TODO Auto-generated method stub
if(arg1==null){
    return null;
}
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
    return (T)sdf.parse((String)arg1);
} catch (ParseException e) {
    throw new RuntimeException(e);
}
   }
}, Date.class);
BeanUtils.setProperty(stu, "bornDate",borndate);

JSP标签

jsp标签一共13个常用的如下:

<jsp:include>标签
动态包含另外一个文件
<jsp:forward>标签
转发到另一个页面
<jsp:param>标签
添加参数
<jsp:useBean>标签
用于在JSP页面中查找或实例化一个JavaBean组件。
<jsp:setProperty>标签
用于在JSP页面中设置一个JavaBean组件的属性。
<jsp:getProperty>标签
用于在JSP页面中获取一个JavaBean组件的属性。
这几个标签估计都需要在整理一篇。

EL

EL也就是Expression Language(表达式语言)

它是为了代替jsp中输出数据的复杂编码,例如获得数据类型转换等。
特点:
- 自动转换类型
- 语法简单

在jsp中使用EL只需要
${EL表达式}
在EL语法中,我们通过变量名取值,而且,它取值会直接输出,如果没有值则不会输出,值为null则输出null,这里的变量名指的是,我们将数据传给session,request,page,application中的name的值,El查找变量的顺序为
page->request->session->addlication

同样我们也可以指定在某个域中寻找,下面会讲到。

El中有两个操作符,“ . ”和“ [] ”我们可以使用这两种,涉及到数字的都需要用后一种,举例来看:

${name}
取出名字为name的值
${name.id}
取出name的值中的名为id的属性值
等价于
${name["id"]}
存取list元素可以通过数字下标来实现
${list[0]}
得到list的值的第一个
对于map类型,我们也能通过key来得到
${map.one}
${map[one]}
两者等价

在EL中也有算数运算符,关系运算符,逻辑运算符。
算数运算符不在多说
关系运算符返回的是false或者true
逻辑运算符包括与或非,分别为
&&/and,||/or,!/not返回false或者true
同样也存在三目运算符
${user!=null?user.name:”没有登录”}

EL的隐式对象

作用域访问对象
- pageScope
- requestScope
- sessionScope
- applicationScope
上面四个分别对应四个作用域,要指定访问的作用域,直接将名称加载前面。
另外还有两个参数访问对象
- param
- paramValues
分别是返回按照参数名称返回单一值的Map对象
和返回String数组的Map对象

最后一个是pageContext提供对页面信息和jsp内置对象的访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值