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
文件,代码如下:
<% @tagliburi = " 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 " ))
{
Cookiecookie = new Cookie( " name " , " newCookie " );
cookie.setMaxAge( 1000 );
response.addCookie(cookie);
}
%>
${myCookie.value} <% -- 用EL输出myCookie的value属性值 -- %>
<%
// ${myCookie.value}相当于如下Java代码
Cookiecookie = (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
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]-->
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]-->
要注意的是,上述的三个 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
文件
,
代码如下
:
<% @tagliburi = " 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 >
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]-->
在
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 文件,代码如下:
<% @tagliburi = " 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文件,并输入如下的内容:
myGreet = hello{ 0 }
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]-->
然后在struts-config.xml中的<struts-config>元素中添加如下的子标签:
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]-->
最后在
<samples
工程目录
>
中建立一个
accessResources.jsp
文件,代码如下:
<% @pageimport = " actionform.HtmlTagsForm " %>
<% @tagliburi = " 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" />
<%
HtmlTagsFormform = 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
文件中加入如下的内容:
<!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]-->
在
<samples
工程目录
>
目录中建立一个
beanWrite.jsp
文件,代码如下:
<% @pageimport = " actionform.HtmlTagsForm,java.util.* " %>
<% @tagliburi = " http://struts.apache.org/tags-bean " prefix = " bean " %>
< html >
< head >
< title > 测试bean:write </ tit
发表评论
评论