【原創】Struts1.x系列教程(6):Bean標籤庫

銀河使者發表於2009-01-19
本文為原創,如需轉載,請註明作者和出處,謝謝!

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/

--&gt  @ 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/

--&gt@ 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/

--&gt  @ 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/

--&gtgreet = hello world
myGreet 
= hello {0}


然後在struts-config.xml中的元素中新增如下的子標籤:

<!--

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

--&gt  <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/

--&gt  @ 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章