Bean 标签库共有11 个标签。这些标签可以完成如下五种工作:
1.       获得HTTP 请求信息
2.       访问Java 对象
3.       访问JSP 内嵌对象和Struts 配置对象
4.       访问Web 资源和属性文件
5.       输出信息
下面我们就来分别介绍一下如何使用Bean 标签库中的标签来完成上述的工作。
一、获得 HTTP 请求信息

   
使用Bean 标签库中的标签可以访问Cookie HTTP 请求头以及请求参数。

    1.   标签
标签用于获得一个Cookie 对象,并创建一个page 范围的变量来保存这个Cookie 对象。 标签有三个常用属性:
1 id :用于保存Cookie 对象的变量名。
2 name Cookie
3 value Cookie 的默认值。如果name 所指的Cookie 不存在, 标签就会创建一个新的Cookie 对象,而value 属性的值就是这个Cookie 对象的value 属性值。如果忽略value 属性,当 标签未找到name 指写的Cookie 时,就会抛出一个javax.servlet.jsp.JspException 异常。因此,笔者建议在使用这个标签时加上value 属性。
2.   标签
    标签用于获得HTTP 请求头字段的值,并创建一个page 范围的变量来保存请求头字段的值。 标签有三个常用属性:
1 id :用于保存HTTP 请求头字段值的变量名。
2 name HTTP 请求头字段名。
3 value HTTP 请求头字段的默认值。如果name 所指的HTTP 请求头字段不存在, 标签就会将value 属性的值存在page 范围的变量中。如果不指定value 属性,且指定的HTTP 请求头字段不存在时, 标签就会抛出javax.servlet.jsp.JspException 异常。
3.  标签
标签用于获得HTTP 请求参数的值,并创建一个page 范围的变量来保存所获得的HTTP 请求参数的值。 标签有三个常用属性:
1 id :用于保存HTTP 请求参数值的变量名。
2 name HTTP 请求参数名。
3 value HTTP 请求参数值的默认值。如果name 所指的HTTP 请求参数不存在, 标签就会将value 属性的值存在page 范围的变量中。如果不指定value 属性,且指定的HTTP 请求参数不存在时, 标签就会抛出javax.servlet.jsp.JspException 异常。
下面的例子演示了如何使用本节所讲的三个Bean 标签来获得HTTP 请求信息,在工程目录> 中建立一个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. 标签
标签用来将Java 对象的属性值保存在变量中。 标签有五个常用属性:
1 id :变量名。
2 name Java 对象名。
3 property Java 对象属性名。
4 scope name 所指的Java 对象所在的访问,如果不指定,默认是page 范围。
5 toScope id 所指的变量要保存的范围,如果不指定,默认是page 范围。
 2. 标签
标签用来获得集合(Map Collection )或数组的长度。 标签有两个常用的属性:
1 id :一个Integer 变量
2 name :集合或数据的变量名。
下面的例子演示了如何使用本节所讲的两个Bean 标签来访问Java 对象。在工程目录> 目录中建立一个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. 标签

   
标签用来建立一个page 范围的变量,并可通过这个变量来访问JSP 的内嵌对象。这个标签有两个属性:
1 id :变量名。
2 property JSP 内嵌对象名,必须是application config, request response session 其中之一。
    2.  标签
标签用来建立一个page 范围的变量,并可通过这个变量来访问Struts 的三个配置对象。这个标签有四个属性:
1 id :变量名。
2 formBean struts-config.xml 文件中的 标签的name 属性值。如果指定这个属性, 会创建org.apache.struts.action.ActionFormBean 类型的对象实例。
3 mapping struts-config.xml 文件中的 标签的path 属性值。如果指定这个属性, 会创建org.apache.struts.action.ActionMapping 类型的对象实例。
4 forward struts-config.xml 文件中的 标签的子标签 name 属性值。如果指定这个属性, 会创建org.apache.struts.action.ActionForward 类型的对象实例。
在使用 标签时应注意,在满足下面三种情况中的一种, 就会抛出异常:
1 )同时使用了formBean mapping forward 中的两个或三个。
2 )未指定formBean mapping forward
3 formBean mapping forward 所指的标签不存在。
    下面的例子演示了 标签的使用方法,在工程目录> 目录中建立一个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. 标签
标签用于获得相对或绝对路径的Web 资源,并将这些资源的内容保存到page 范围的变量中。 标签有四个常用的属性:
1 id :变量名。
2 href Web 资源的绝对路径。
3 page Web 资源的相对路径。以“/ ”开头。
4 forward struts-config.xml 文件 元素的子元素 name 属性值。如果指定这个属性, 标签会自动获得 path 属性所指的Web 资源的内容。
2. 标签
标签和 标签类似,也用来获得Web 资源的内容,但和 的不同之处是 在访问Web 资源时(如JSP 页面),并不执行这个JSP 页面,而是将整个JSP 页面的原始内容保存到变量中,而 在访问这个JSP 页面时,会先执行这个JSP 页面,然后将JSP 页面执行后的结果保存在变量中。因此,使用 访问Web 资源和在IE 中输入相应的URL 的效果是一样的。而 获得的是JSP 页面的源代码。
标签有三个属性:
1 id :变量名。
2 name Web 资源的相对路径。以“/ ”开头。
3 input :如果指定input 属性,id 变量为java.io.InputStream 类型,如果未指定input 属性,id 变量为String 类型。
    3. 标签
标签用于从Java 属性文件中获得字符串信息。要注意的是, 标签获得字符串信息后,并不将所获得的信息保存在变量中,而是将其直接输出,也就是在执行JSP 页面时,在生成客户端内容时, 标签会被属性文件中的字符串信息代替。 标签的常用属性如下:   
1 key :属性文件中的字符串信息键名。
2 bundle struts-config.xml 文件中的 标签的key 值属值。如果不指定bundle 属性,就使用默认的属性文件。
3 name :用于获得键名的字符串变量名或对象实例变量名。 标签除了从key 属性中获得键名,还可以通过将key 保存在指定范围的变量中,然后通过name 属性获得这个key
4 property :获得key 的属性名。如果name 属性为对象实例变量名,则 标签会从property 所指的属性中获得key
5 scope 标签获得name 变量的范围。默认值是page
6 arg0 ~ arg4 :用于向带参数的字符串信息中传入参数值。分别对应于属性文件中的{0} ~ {4}
下面的例子演示了本节所涉及到的三个标签的使用方法。在运行这个例子之前,先在"src"struts目录中建立一个MyResources.properties文件,并输入如下的内容:   

greet  =  hello world
myGreet 
=  hello { 0 }

然后在struts-config.xml中的元素中添加如下的子标签:

   < message-resources  parameter ="struts.MyResources"  key ="my"   />
最后在工程目录> 中建立一个acce***esources.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来测试acce***esources.jsp:

http://localhost:8080/samples/acce***esources.jsp


五、使用 标签输出信息
用于输出字符串变量及对象变量的属性值。 有如下六个常用的属性:
1. name :变量名(包括字符串变量或对象变量)。
2. property :如果name 是对象变量,property 表示name 对象的属性。
3. filter :是否过滤输出内容中的HTML 元素。如果filter true ,输出内容中的所有的HTML 元素的敏感符号都会被替换成相应的字符串(如“< ”被替换成了“< ”,“> ”被替换成了“> ”)。
4. format :用于格式化输出内容的格式化字符串。
5. formatKey :保存在属性文件中的格式化字符串的key
6. scope name 变量保存的范围。默认是page 范围。
下面的例子演示了 的常用方法。在运行这个例子之前,在工程目录>"src"struts"MyResources.properties 文件中加入如下的内容:

formatDate  =  yyyy-MM-dd hh:mm:ss
工程目录> 目录中建立一个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(
" 工程师 " );
              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