ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【原创】Struts1.x系列教程(6):Bean标签库

【原创】Struts1.x系列教程(6):Bean标签库

原创 Linux操作系统 作者:银河使者 时间:2009-01-19 09:40:55 0 删除 编辑
本文为原创,如需转载,请注明作者和出处,谢谢!

Bean标签库共有11个标签。这些标签可以完成如下五种工作:

1.       获得HTTP请求信息

2.       访问Java对象

3.       访问JSP内嵌对象和Struts配置对象

4.       访问Web资源和属性文件

5.       输出信息

下面我们就来分别介绍一下如何使用Bean标签库中的标签来完成上述的工作。

一、获得HTTP请求信息


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

    1.  标签

标签用于获得一个Cookie对象,并创建一个page范围的变量来保存这个Cookie对象。标签有三个常用属性:

1id:用于保存Cookie对象的变量名。

2nameCookie

3valueCookie的默认值。如果name所指的Cookie不存在,标签就会创建一个新的Cookie对象,而value属性的值就是这个Cookie对象的value属性值。如果忽略value属性,当标签未找到name指写的Cookie时,就会抛出一个javax.servlet.jsp.JspException异常。因此,笔者建议在使用这个标签时加上value属性。

2.  标签

    标签用于获得HTTP请求头字段的值,并创建一个page范围的变量来保存请求头字段的值。标签有三个常用属性:

1id:用于保存HTTP请求头字段值的变量名。

2nameHTTP请求头字段名。

3valueHTTP请求头字段的默认值。如果name所指的HTTP请求头字段不存在,标签就会将value属性的值存在page范围的变量中。如果不指定value属性,且指定的HTTP请求头字段不存在时,标签就会抛出javax.servlet.jsp.JspException异常。

3. 标签

标签用于获得HTTP请求参数的值,并创建一个page范围的变量来保存所获得的HTTP请求参数的值。标签有三个常用属性:

1id:用于保存HTTP请求参数值的变量名。

2nameHTTP请求参数名。

3valueHTTP请求参数值的默认值。如果name所指的HTTP请求参数不存在,标签就会将value属性的值存在page范围的变量中。如果不指定value属性,且指定的HTTP请求参数不存在时,标签就会抛出javax.servlet.jsp.JspException异常。

下面的例子演示了如何使用本节所讲的三个Bean标签来获得HTTP请求信息,在工程目录>中建立一个httpRequestInfo.jsp文件,代码如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->  <%@ 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
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

    要注意的是,上述的三个Bean标签都将变量保存到了page范围内(也就是JSP内嵌对象pageContext中),并且不能改变变量的保存范围。读者在使用这三个Bean标签时应注意这一点。

二、访问Java对象

1. 标签

标签用来将Java对象的属性值保存在变量中。标签有五个常用属性:

1id:变量名。

2nameJava对象名。

3propertyJava对象属性名。

4scopename所指的Java对象所在的访问,如果不指定,默认是page范围。

5toScopeid所指的变量要保存的范围,如果不指定,默认是page范围。

 2. 标签

标签用来获得集合(MapCollection)或数组的长度。标签有两个常用的属性:

1id:一个Integer变量

2name:集合或数据的变量名。

下面的例子演示了如何使用本节所讲的两个Bean标签来访问Java对象。在工程目录>目录中建立一个accessJavaObject.jsp文件代码如下

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><%@ 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>

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

IE中输入如下的URL来测试accessJavaObject.jsp

http://localhost:8080/samples/accessJavaObject.jsp

 

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 三、访问JSP内嵌对象和Struts配置对象


   
1. 标签

   
标签用来建立一个page范围的变量,并可通过这个变量来访问JSP的内嵌对象。这个标签有两个属性:

1id:变量名。

2propertyJSP内嵌对象名,必须是applicationconfig,requestresponsesession其中之一。

    2. 标签

标签用来建立一个page范围的变量,并可通过这个变量来访问Struts的三个配置对象。这个标签有四个属性:

1id:变量名。

2formBeanstruts-config.xml文件中的标签的name属性值。如果指定这个属性,会创建org.apache.struts.action.ActionFormBean类型的对象实例。

3mappingstruts-config.xml文件中的标签的path属性值。如果指定这个属性,会创建org.apache.struts.action.ActionMapping类型的对象实例。

4forwardstruts-config.xml文件中的标签的子标签name属性值。如果指定这个属性,会创建org.apache.struts.action.ActionForward类型的对象实例。

在使用标签时应注意,在满足下面三种情况中的一种,就会抛出异常:

1)同时使用了formBeanmappingforward中的两个或三个。

2)未指定formBeanmappingforward

3formBeanmappingforward所指的标签不存在。

    下面的例子演示了标签的使用方法,在工程目录>目录中建立一个accessEmbeddedObject.jsp文件,代码如下:


<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->  <%@ 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>

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 四、访问Web资源和属性文件

1. 标签

标签用于获得相对或绝对路径的Web资源,并将这些资源的内容保存到page范围的变量中。标签有四个常用的属性:

1id:变量名。

2hrefWeb资源的绝对路径。

3pageWeb资源的相对路径。以“/”开头。

4forwardstruts-config.xml文件元素的子元素name属性值。如果指定这个属性,标签会自动获得path属性所指的Web资源的内容。

2. 标签

标签和标签类似,也用来获得Web资源的内容,但和的不同之处是在访问Web资源时(如JSP页面),并不执行这个JSP页面,而是将整个JSP页面的原始内容保存到变量中,而在访问这个JSP页面时,会先执行这个JSP页面,然后将JSP页面执行后的结果保存在变量中。因此,使用访问Web资源和在IE中输入相应的URL的效果是一样的。而获得的是JSP页面的源代码。

标签有三个属性:

1id:变量名。

2nameWeb资源的相对路径。以“/”开头。

3input:如果指定input属性,id变量为java.io.InputStream类型,如果未指定input属性,id变量为String类型。

    3. 标签

标签用于从Java属性文件中获得字符串信息。要注意的是,标签获得字符串信息后,并不将所获得的信息保存在变量中,而是将其直接输出,也就是在执行JSP页面时,在生成客户端内容时,标签会被属性文件中的字符串信息代替。标签的常用属性如下:   

1key:属性文件中的字符串信息键名。

2bundlestruts-config.xml文件中的标签的key值属值。如果不指定bundle属性,就使用默认的属性文件。

3name:用于获得键名的字符串变量名或对象实例变量名。标签除了从key属性中获得键名,还可以通过将key保存在指定范围的变量中,然后通过name属性获得这个key

4property:获得key的属性名。如果name属性为对象实例变量名,则标签会从property所指的属性中获得key

5scope标签获得name变量的范围。默认值是page

6arg0 ~ arg4:用于向带参数的字符串信息中传入参数值。分别对应于属性文件中的{0} ~ {4}

下面的例子演示了本节所涉及到的三个标签的使用方法。在运行这个例子之前,先在"src"struts目录中建立一个MyResources.properties文件,并输入如下的内容:   

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->greet = hello world
myGreet 
= hello {0}


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

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->  <message-resources parameter="struts.MyResources" key="my" />

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4

最后在工程目录>中建立一个accessResources.jsp文件,代码如下:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->  <%@ page pageEncoding="GBK"%>
  
<%@ page import="actionform.HtmlTagsForm"%>
  
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
  
<html>
      
<head>
          
<title>访问Web资

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12921506/viewspace-541385/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2008-02-08

  • 博文量
    169
  • 访问量
    1055725