chap6 jsp页面中使用JavaBean组件 |
(1)JavaBeans(bean):在jsp中作为将要显示在web页面中的动态内容的容器。一般代表特定事物。 |
(2)用途1:当jsp与servlet结合时,bean可由servlet进行带数据的创建和初始化,再传递给jsp页面(把bean的数据添加到response中)。 |
(3)用途2:在纯jsp应用中,bean也可用于捕捉和验证用户的输入。 |
(4)jsp对bean的支持:1>定义了大量相关的标准action;2>jstl EL中可以把bean作为变量。 |
6.1 什么是bean? |
(1)bean是遵循JavaBeans规范中定义的一系列guideline的Java class,可以在更大的app.中作为组件使用。 |
(2)用途1:在使用servlet作为所有business logic的frontend时,bean一般由business logic代码创建,再传递给jsp页面(把bean的数据添加到response中)。[详见]chap18和chap19 |
(3)用途2:在jsp页面中直接创建bean. [注]这是本章主要内容。 |
(4)JavaBeans的一些说明: |
1> 对于bean class,应当总使用package name,以方便在jsp页面中以portable的方式使用bean |
2> bean class应该有一个无参数的constructor,只需要class name就能创建一个bean |
3> 通过getter和setter方法(accessor方法),访问bean的属性(类的variable):get/set+属性名称(首字母大写)。 Getter对应readable,setter对应writable,通过两者组合可以使属性read-only,write-only,或read/write |
4> bean class应当实现java.io.Serializable或java.io.Externalizable接口,使一个tool能够保存和重置bean的状态。 |
(5)bean属性的一些说明: |
1> bean属性:bean拥有的数据。名称区分大小写,以小写字母开头。对应特定的Java数据类型。 |
2> 在jsp页面中使用bean所需知道的:[1]class名称;[2]属性名称;[3]属性的数据类型;[4]属性的访问方式(read-only?write-only?read-write?);[5]对每个属性代表的data的描述。 |
6.2 在jsp页面中声明bean |
[例子] <jsp:useBean id="cartoon" class="com.ora.jsp.beans.motd.CartoonBean" /> |
(1)<jsp:useBean>:jsp的标准action之一,创建了class类的、名为id的bean class instance |
(2)class属性:标识bean class类。 |
(3)id属性:标识bean class的instance名称。在页面中必须是唯一的。 |
6.3 读取bean属性 |
两种方法: |
6.3.1 使用<jsp:getProperty> action |
[例子] <img src="images/<jsp:getProperty name="cartoon" property="fileName" />"> |
(1)<jsp:getProperty>获取bean属性的当前值,并把该值直接插入到response body中。 |
(2)name:标识<jsp:useBean>声明的特定bean instance(本例中的cartoon)。 |
(3)property:标识所需的属性 |
(4)本例中,fileName属性值被作为html中<img>元素的src属性值的一部分。[注]元素<jsp:getPropery>被用作<img>元素的src的属性值,这不符合html语法,但是符合jsp语法,而container并不解释template text的含义。当jsp页面被处理时,action元素被bean的属性值替换。因此,产生的html可能是:<img src="images/dilbert2731150011029.gif">。[注]但不能够使用某个action元素为另一个action元素的属性赋值。 |
6.3.2 使用jstl的EL |
[例子] <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <img src="images/<c:out value="${cartoon.fileName}" />"> |
(1) <jsp:useBean>创建的bean(本例中cartoon)可以作为EL的变量(${cartoon.fileName}) |
(2) <c:out value="${someBean.aProperty.aPropertyOfTheProperty}" /> <c:out>把someBean(本例中cartoon)的aPropery.aProperyOfThePropery(本例中fileName)属性值赋给value |
[采用哪种方法] |
主要根据偏好。<jsp:getProperty>一直包括在jsp spec.中;<c:out>最近才进入jstl spec.,更加灵活,略为简洁。如果重新开发一个app.,使用<c:out〉吧。 |
6.3.3 jsp中包含图像 |
不应该使用jsp在页面中包含动态图像: |
[理由1]推荐在jsp产生的response中只包括一种类型的内容(尽管http response可以包括不同类型的多个部分),因此不应该把html和image混在一个response中。浏览器对于带有<img>元素的html response,对每一个image重新发送一个request,再把html和image合并。 因此为了在jsp产生的response中包含image,只需要像html一样。只是uri是在runtime时决定的。 |
[理由2]jsp用于text响应,而不是binary响应。如果需要动态产生图像,应该使用servlet。在servlet中,可以把表示servlet的uri添加到<img>元素中。例如:<img src="imageGeneratorServlet?width=100&height=100"> |
6.4 设置bean属性 [例子] <jsp:setProperty name="msg" property="category" value="thoughts" /> …… <jsp:getProperty name="msg" property="message" /> …... <jsp:setProperty name="msg" property="category" value="quotes" /> |
(1)<jsp:setProperty>设置bean的property指定的属性。 |
(2)name:与<jsp:useBean>中的id属性匹配 |
(3)property:标识设置哪一个属性。 |
(4)value:包含用于该属性的值。 |
(5)<jsp:getProperty>用于把message插入到response中。 |
6.4.1 自动类型转换 (1)对于属性值,container一般会把text值转换为其它Java types。但对于复杂的type,仍需要编程。 |
(2)使用<jsp:setProperty>时,container自动把text转换为某一Java type,使用的函数[参见]本书表6.3 |
(3)对于java.util.Date,jsp spec.定义了如何开发“property editor”来处理转换。[参见]本书chap20 |
(4)<jsp:getProperty>或<c:out>的返回值总被转换成String。 |
chap6 jsp页面中使用JavaBean组件
最新推荐文章于 2022-11-13 01:05:22 发布