jsp内省EL

来源:互联网 发布:ubuntu on windows 编辑:程序博客网 时间:2024/06/10 22:29

内省

为什么要使用内省
开发框架时,经常需要使用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() {@Overridepublic <T> T convert(Class<T> arg0, Object arg1) {// TODO Auto-generated method stubif(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内置对象的访问。

原创粉丝点击