Bean
标签库共有11
个标签。这些标签可以完成如下五种工作:
1.
获得HTTP
请求信息
2.
访问Java
对象
3.
访问JSP
内嵌对象和Struts
配置对象
4.
访问Web
资源和属性文件
5.
输出信息
下面我们就来分别介绍一下如何使用Bean
标签库中的标签来完成上述的工作。
一、获得
HTTP
请求信息
使用Bean
标签库中的标签可以访问Cookie
、HTTP
请求头以及请求参数。
1. <bean:cookie>
标签
<bean:cookie>
标签用于获得一个Cookie
对象,并创建一个page
范围的变量来保存这个Cookie
对象。<bean:cookie>
标签有三个常用属性:
(1
)id
:用于保存Cookie
对象的变量名。
(2
)name
:Cookie
名
(3
)value
:Cookie
的默认值。如果name
所指的Cookie
不存在,<bean:cookie>
标签就会创建一个新的Cookie
对象,而value
属性的值就是这个Cookie
对象的value
属性值。如果忽略value
属性,当<bean:cookie>
标签未找到name
指写的Cookie
时,就会抛出一个javax.servlet.jsp.JspException
异常。因此,笔者建议在使用这个标签时加上value
属性。
2. <bean:header>
标签
<bean:header>
标签用于获得HTTP
请求头字段的值,并创建一个page
范围的变量来保存请求头字段的值。<bean:header>
标签有三个常用属性:
(1
)id
:用于保存HTTP
请求头字段值的变量名。
(2
)name
:HTTP
请求头字段名。
(3
)value
:HTTP
请求头字段的默认值。如果name
所指的HTTP
请求头字段不存在,<bean:header>
标签就会将value
属性的值存在page
范围的变量中。如果不指定value
属性,且指定的HTTP
请求头字段不存在时,<bean:header>
标签就会抛出javax.servlet.jsp.JspException
异常。
3. <bean:parameter>
标签
<bean:parameter>
标签用于获得HTTP
请求参数的值,并创建一个page
范围的变量来保存所获得的HTTP
请求参数的值。<bean:parameter>
标签有三个常用属性:
(1
)id
:用于保存HTTP
请求参数值的变量名。
(2
)name
:HTTP
请求参数名。
(3
)value
:HTTP
请求参数值的默认值。如果name
所指的HTTP
请求参数不存在,<bean:parameter >
标签就会将value
属性的值存在page
范围的变量中。如果不指定value
属性,且指定的HTTP
请求参数不存在时,<bean:parameter>
标签就会抛出javax.servlet.jsp.JspException
异常。
下面的例子演示了如何使用本节所讲的三个Bean
标签来获得HTTP
请求信息,在<samples
工程目录>
中建立一个httpRequestInfo.jsp
文件,代码如下:
<%
@ page pageEncoding
=
"
GBK
"
%>
<%
@ taglib uri
=
"
http://struts.apache.org/tags-bean
"
prefix
=
"
bean
"
%>
<
html
>
<
head
>
<
title
>
获得HTTP请求信息
</
title
>
</
head
>
<
body
>
<%
--
测试bean:cookie标签
--
%>
<
bean:cookie
id
="myCookie"
name
="name"
value
="default"
/>
<%
if
(myCookie.getValue().equals(
"
default
"
))
{
Cookie cookie
=
new
Cookie(
"
name
"
,
"
newCookie
"
);
cookie.setMaxAge(
1000
);
response.addCookie(cookie);
}
%>
${myCookie.value}
<%
--
用EL输出myCookie的value属性值
--
%>
<%
//
${myCookie.value}相当于如下Java代码
Cookie cookie
=
(Cookie)pageContext.getAttribute(
"
myCookie
"
);
out.println(cookie.getValue());
%>
<
br
>
<%
--
测试bean:header标签
--
%>
<
bean:header
id
="userAgent"
name
="user-agent"
value
="unknown"
/>
${userAgent}
<
br
>
<%
--
用EL输出userAgent的值
--
%>
<%
--
测试bean:parameter标签
--
%>
<
bean:parameter
id
="myCountry"
name
="country"
value
="unknown"
/>
${myCountry}
<%
--
用EL输出myCountry的值
--
%>
</
body
>
</
html
>
在IE中输入如下的URL来测试httpRequestInfo.jsp:
http://localhost:8080/samples/httpRequestInfo.jsp?country=China
要注意的是,上述的三个Bean
标签都将变量保存到了page
范围内(也就是JSP
内嵌对象pageContext
中),并且不能改变变量的保存范围。读者在使用这三个Bean
标签时应注意这一点。
二、访问
Java
对象
1. <bean:define>标签
<bean:define>
标签用来将Java
对象的属性值保存在变量中。<bean:define>
标签有五个常用属性:
(1
)id
:变量名。
(2
)name
:Java
对象名。
(3
)property
:Java
对象属性名。
(4
)scope
:name
所指的Java
对象所在的访问,如果不指定,默认是page
范围。
(5
)toScope
:id
所指的变量要保存的范围,如果不指定,默认是page
范围。
2. <bean:size>标签
<bean:size>
标签用来获得集合(Map
、Collection
)或数组的长度。<bean:size>
标签有两个常用的属性:
(1
)id
:一个Integer
变量
(2
)name
:集合或数据的变量名。
下面的例子演示了如何使用本节所讲的两个Bean
标签来访问Java
对象。在<samples
工程目录>
目录中建立一个accessJavaObject.jsp
文件
,
代码如下
:
<%
@ page pageEncoding
=
"
GBK
"
%>
<%
@ taglib uri
=
"
http://struts.apache.org/tags-bean
"
prefix
=
"
bean
"
%>
<
html
>
<
head
>
<
title
>
访问Java对象
</
title
>
</
head
>
<
body
>
<%
--
建立actionform.HtmlTagsForm对象实例
--
%>
<
jsp:useBean
id
="htmlTagsForm"
class
="actionform.HtmlTagsForm"
/>
<
jsp:setProperty
name
="htmlTagsForm"
property
="name"
value
= "李宁"
/>
<%
--
测试bean:define标签
--
%>
<
bean:define
id
="myBeanVar"
name
="htmlTagsForm"
property
="name"
/>
${myBeanVar}
<%
String
[] arr
=
new
String
[
10
];
pageContext.setAttribute(
"
arr
"
, arr);
%>
<%
--
测试bean:size标签
--
%>
<
bean:size
id
="length"
name
="arr"
/>
${length}
</
body
>
</
html
>
在IE
中输入如下的URL
来测试accessJavaObject.jsp
:
http://localhost:8080/samples/accessJavaObject.jsp
三、访问
JSP
内嵌对象和
Struts
配置对象
1. <bean:page>标签
<bean:page>
标签用来建立一个page
范围的变量,并可通过这个变量来访问JSP
的内嵌对象。这个标签有两个属性:
(1
)id
:变量名。
(2
)property
:JSP
内嵌对象名,必须是application
、config,
、request
、response
或session
其中之一。
2. <bean:struts>
标签
<bean:struts>
标签用来建立一个page
范围的变量,并可通过这个变量来访问Struts
的三个配置对象。这个标签有四个属性:
(1
)id
:变量名。
(2
)formBean
:struts-config.xml
文件中的<form-bean>
标签的name
属性值。如果指定这个属性,<bean:struts>
会创建org.apache.struts.action.ActionFormBean
类型的对象实例。
(3
)mapping
:struts-config.xml
文件中的<action>
标签的path
属性值。如果指定这个属性,<bean:struts>
会创建org.apache.struts.action.ActionMapping
类型的对象实例。
(4
)forward
:struts-config.xml
文件中的<global-forwards>
标签的子标签<forward>
的name
属性值。如果指定这个属性,<bean:struts>
会创建org.apache.struts.action.ActionForward
类型的对象实例。
在使用<bean:struts>
标签时应注意,在满足下面三种情况中的一种,<bean:struts>
就会抛出异常:
(1
)同时使用了formBean
、mapping
和forward
中的两个或三个。
(2
)未指定formBean
、mapping
和forward
(3
)formBean
、mapping
或forward
所指的标签不存在。
下面的例子演示了<bean:page>
和<bean:struts>
标签的使用方法,在<samples
工程目录>
目录中建立一个accessEmbeddedObject.jsp
文件,代码如下:
<%
@ page pageEncoding
=
"
GBK
"
%>
<%
@ taglib uri
=
"
http://struts.apache.org/tags-bean
"
prefix
=
"
bean
"
%>
<
html
>
<
head
>
<
title
>
访问JSP内嵌对象和Struts配置对象
</
title
>
</
head
>
<
body
>
<
bean:page
id
="myRequest"
property
="request"
/>
myRequest.characterEncoding = ${myRequest.characterEncoding}
<
br
>
myRequest.contextPath = ${myRequest.contextPath}
<%
out.println(myRequest.getParameter(
"
abc
"
));
%>
<
bean:struts
id
= "myHtmlTagsForm"
formBean
="htmlTagsForm"
/><
br
>
myHtmlTagsForm.type = ${myHtmlTagsForm.type}
<
br
>
myHtmlTagsForm.getClass() = ${myHtmlTagsForm.class}
<
bean:struts
id
= "myHtmlTags"
mapping
="/htmlTags"
/><
br
>
myHtmlTags.type = ${myHtmlTags.type}
<
br
>
myHtmlTags.getClass() = ${myHtmlTags.class}
<
bean:struts
id
= "myNewProduct"
forward
="newProduct"
/><
br
>
myNewProduct.path = ${myNewProduct.path}
<
br
>
myNewProduct.getClass() = ${myNewProduct.class}
</
body
>
</
html
>
四、访问
Web
资源和属性文件
1. <bean:include>标签
<bean:include>
标签用于获得相对或绝对路径的Web
资源,并将这些资源的内容保存到page
范围的变量中。<bean:include>
标签有四个常用的属性:
(1
)id
:变量名。
(2
)href
:Web
资源的绝对路径。
(3
)page
:Web
资源的相对路径。以“/
”开头。
(4
)forward
:struts-config.xml
文件<global-forwards>
元素的子元素<forward>
的name
属性值。如果指定这个属性,<bean:include>
标签会自动获得<forward>
的path
属性所指的Web
资源的内容。
2. <bean:resource>标签
<bean:resource>
标签和<bean:include>
标签类似,也用来获得Web
资源的内容,但和<bean:include>
的不同之处是<bean:resource>
在访问Web
资源时(如JSP
页面),并不执行这个JSP
页面,而是将整个JSP
页面的原始内容保存到变量中,而<bean:include>
在访问这个JSP
页面时,会先执行这个JSP
页面,然后将JSP
页面执行后的结果保存在变量中。因此,使用<bean:include>
访问Web
资源和在IE
中输入相应的URL
的效果是一样的。而<bean:resource>
获得的是JSP
页面的源代码。
<bean:resource>
标签有三个属性:
(1
)id
:变量名。
(2
)name
:Web
资源的相对路径。以“/
”开头。
(3
)input
:如果指定input
属性,id
变量为java.io.InputStream
类型,如果未指定input
属性,id
变量为String
类型。
3. <bean:message>标签
<bean:message>
标签用于从Java
属性文件中获得字符串信息。要注意的是,<bean:message>
标签获得字符串信息后,并不将所获得的信息保存在变量中,而是将其直接输出,也就是在执行JSP
页面时,在生成客户端内容时,<bean:message>
标签会被属性文件中的字符串信息代替。<bean:message>
标签的常用属性如下:
(1
)key
:属性文件中的字符串信息键名。
(2
)bundle
:struts-config.xml
文件中的<message-resources>
标签的key
值属值。如果不指定bundle
属性,就使用默认的属性文件。
(3
)name
:用于获得键名的字符串变量名或对象实例变量名。<bean:message>
标签除了从key
属性中获得键名,还可以通过将key
保存在指定范围的变量中,然后通过name
属性获得这个key
。
(4
)property
:获得key
的属性名。如果name
属性为对象实例变量名,则<bean:message>
标签会从property
所指的属性中获得key
。
(5
)scope
:<bean:message>
标签获得name
变量的范围。默认值是page
。
(6
)
arg0 ~ arg4
:用于向带参数的字符串信息中传入参数值。分别对应于属性文件中的{0} ~ {4}
。
下面的例子演示了本节所涉及到的三个标签的使用方法。在运行这个例子之前,先在<samples工程目录>"src"struts目录中建立一个MyResources.properties文件,并输入如下的内容:
greet
=
hello world
myGreet
=
hello {
0
}
然后在struts-config.xml中的<struts-config>元素中添加如下的子标签:
<
message-resources
parameter
="struts.MyResources"
key
="my"
/>
最后在<samples
工程目录>
中建立一个accessResources.jsp
文件,代码如下:
<%
@ page pageEncoding
=
"
GBK
"
%>
<%
@ page import
=
"
actionform.HtmlTagsForm
"
%>
<%
@ taglib uri
=
"
http://struts.apache.org/tags-bean
"
prefix
=
"
bean
"
%>
<
html
>
<
head
>
<
title
>
访问Web资源和属性文件
</
title
>
</
head
>
<
body
>
<
bean:include
id
="myWebVar1"
href
="http://localhost:8080/samples/simpleValidation.jsp"
/>
<
bean:include
id
="myWebVar2"
page
="/htmlTags.jsp"
/>
<
bean:include
id
="myWebVar3"
forward
="newProduct"
/>
${myWebVar1} ${myWebVar2} ${myWebVar3}
<
bean:resource
id
="myResVar"
name
="/htmlTags.jsp"
/>
${myResVar}
<%
--
从MyResources.properties中获得信息
--
%>
<
bean:message
bundle
="my"
key
="greet"
/>
<%
--
从ErrorDescription.properties中获得信息
--
%>
<
bean:message
key
="error.email.invalid"
/>
<
bean:message
bundle
="my"
key
="myGreet"
arg0
="李宁"
/>
<%
request.setAttribute(
"
newGreet
"
,
"
greet
"
);
%>
<
bean:message
bundle
="my"
name
="newGreet"
/>
<%
HtmlTagsForm form
=
new
HtmlTagsForm();
form.setName(
"
myGreet
"
);
request.setAttribute(
"
form
"
, form);
%>
<%
--
从form对象的name属性获得key
--
%>
<
bean:message
bundle
="my"
name
="form"
property
="name"
arg0
="李宁"
/>
</
body
>
</
html
>
在IE中输入如下的URL来测试accessResources.jsp:
http://localhost:8080/samples/accessResources.jsp
五、使用
<bean:write>
标签输出信息
<bean:write>
用于输出字符串变量及对象变量的属性值。<bean:write>
有如下六个常用的属性:
1. name
:变量名(包括字符串变量或对象变量)。
2. property
:如果name
是对象变量,property
表示name
对象的属性。
3. filter
:是否过滤输出内容中的HTML
元素。如果filter
为true
,输出内容中的所有的HTML
元素的敏感符号都会被替换成相应的字符串(如“<
”被替换成了“<
”,“>
”被替换成了“>
”)。
4. format
:用于格式化输出内容的格式化字符串。
5. formatKey
:保存在属性文件中的格式化字符串的key
。
6. scope
:name
变量保存的范围。默认是page
范围。
下面的例子演示了<bean:write>
的常用方法。在运行这个例子之前,在<samples
工程目录>"src"struts"MyResources.properties
文件中加入如下的内容:
formatDate
=
yyyy-MM-dd hh:mm:ss
在<samples
工程目录>
目录中建立一个beanWrite.jsp
文件,代码如下:
<%
@ page pageEncoding
=
"
GBK
"
%>
<%
@page import
=
"
actionform.HtmlTagsForm,java.util.*
"
%>
<%
@ taglib uri
=
"
http://struts.apache.org/tags-bean
"
prefix
=
"
bean
"
%>
<
html
>
<
head
>
<
title
>
测试bean:write
</
title
>
</
head
>
<
body
>
<%
request.setAttribute(
"
abcd
"
,
"
myValue
"
);
HtmlTagsForm form
=
new
HtmlTagsForm();
form.setName(
"
hello
"
);
form.setWork(
"
<b>工程师</b>
"
);
request.setAttribute(
"
form
"
, form);
Calendar calendar
=
Calendar.getInstance();
request.setAttribute(
"
calendar
"
, calendar);
%>
<
bean:write
name
="abcd"
/><
br
>
<
bean:write
name
="form"
property
="name"
/><
br
>
<
bean:write
name
="form"
property
="work"
/><
br
>
<
bean:write
name
="form"
property
="work"
filter
="false"
/><
br
>
<
bean:write
name
="calendar"
property
="time"
format
="yyyy-MM-dd HH:mm:ss"
/><
br
>
<
bean:write
name
="calendar"
property
="time"
formatKey
="formatDate"
bundle
="my"
/>
</
body
>
</
html
>
在IE
中输入如下的URL
来测试beanWrite.jsp
:
http://localhost:8080/samples/beanWrite.jsp
如果读者想了解关于bean标签库的更详细的信息,也可以访问官方的网站,URL如下:
http://struts.apache.org/1.2.9/userGuide/struts-bean.html