本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!
Bean 標(biāo)簽庫共有 11 個(gè)標(biāo)簽。這些標(biāo)簽可以完成如下五種工作:
1. 獲得 HTTP 請(qǐng)求信息
2. 訪問 Java 對(duì)象
3. 訪問 JSP 內(nèi)嵌對(duì)象和 Struts 配置對(duì)象
4. 訪問 Web 資源和屬性文件
5. 輸出信息
下面我們就來分別介紹一下如何使用 Bean 標(biāo)簽庫中的標(biāo)簽來完成上述的工作。
一、獲得 HTTP 請(qǐng)求信息
使用
Bean
標(biāo)簽庫中的標(biāo)簽可以訪問
Cookie
、
HTTP
請(qǐng)求頭以及請(qǐng)求參數(shù)。
1. <bean:cookie> 標(biāo)簽
<bean:cookie> 標(biāo)簽用于獲得一個(gè) Cookie 對(duì)象,并創(chuàng)建一個(gè) page 范圍的變量來保存這個(gè) Cookie 對(duì)象。 <bean:cookie> 標(biāo)簽有三個(gè)常用屬性:
( 1 ) id :用于保存 Cookie 對(duì)象的變量名。
( 2 ) name : Cookie 名
( 3 ) value : Cookie 的默認(rèn)值。如果 name 所指的 Cookie 不存在, <bean:cookie> 標(biāo)簽就會(huì)創(chuàng)建一個(gè)新的 Cookie 對(duì)象,而 value 屬性的值就是這個(gè) Cookie 對(duì)象的 value 屬性值。如果忽略 value 屬性,當(dāng) <bean:cookie> 標(biāo)簽未找到 name 指寫的 Cookie 時(shí),就會(huì)拋出一個(gè) javax.servlet.jsp.JspException 異常。因此,筆者建議在使用這個(gè)標(biāo)簽時(shí)加上 value 屬性。
2. <bean:header> 標(biāo)簽
<bean:header> 標(biāo)簽用于獲得 HTTP 請(qǐng)求頭字段的值,并創(chuàng)建一個(gè) page 范圍的變量來保存請(qǐng)求頭字段的值。 <bean:header> 標(biāo)簽有三個(gè)常用屬性:
( 1 ) id :用于保存 HTTP 請(qǐng)求頭字段值的變量名。
( 2 ) name : HTTP 請(qǐng)求頭字段名。
( 3 ) value : HTTP 請(qǐng)求頭字段的默認(rèn)值。如果 name 所指的 HTTP 請(qǐng)求頭字段不存在, <bean:header> 標(biāo)簽就會(huì)將 value 屬性的值存在 page 范圍的變量中。如果不指定 value 屬性,且指定的 HTTP 請(qǐng)求頭字段不存在時(shí), <bean:header> 標(biāo)簽就會(huì)拋出 javax.servlet.jsp.JspException 異常。
3.<bean:parameter> 標(biāo)簽
<bean:parameter> 標(biāo)簽用于獲得 HTTP 請(qǐng)求參數(shù)的值,并創(chuàng)建一個(gè) page 范圍的變量來保存所獲得的 HTTP 請(qǐng)求參數(shù)的值。 <bean:parameter> 標(biāo)簽有三個(gè)常用屬性:
( 1 ) id :用于保存 HTTP 請(qǐng)求參數(shù)值的變量名。
( 2 ) name : HTTP 請(qǐng)求參數(shù)名。
( 3 ) value : HTTP 請(qǐng)求參數(shù)值的默認(rèn)值。如果 name 所指的 HTTP 請(qǐng)求參數(shù)不存在, <bean:parameter > 標(biāo)簽就會(huì)將 value 屬性的值存在 page 范圍的變量中。如果不指定 value 屬性,且指定的 HTTP 請(qǐng)求參數(shù)不存在時(shí), <bean:parameter> 標(biāo)簽就會(huì)拋出 javax.servlet.jsp.JspException 異常。
下面的例子演示了如何使用本節(jié)所講的三個(gè)
Bean
標(biāo)簽來獲得
HTTP
請(qǐng)求信息,在
<samples
工程目錄
>
中建立一個(gè)
httpRequestInfo.jsp
文件,代碼如下:
<% @tagliburi = " http://struts.apache.org/tags-bean " prefix = " bean " %>
< html >
< head >
< title > 獲得HTTP請(qǐng)求信息 </ title >
</ head >
< body >
<% -- 測(cè)試bean:cookie標(biāo)簽 -- %>
< 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}相當(dāng)于如下Java代碼
Cookiecookie = (Cookie)pageContext.getAttribute( " myCookie " );
out.println(cookie.getValue());
%> < br >
<% -- 測(cè)試bean:header標(biāo)簽 -- %>
< bean:header id ="userAgent" name ="user-agent" value ="unknown" />
${userAgent} < br > <% -- 用EL輸出userAgent的值 -- %>
<% -- 測(cè)試bean:parameter標(biāo)簽 -- %>
< bean:parameter id ="myCountry" name ="country" value ="unknown" />
${myCountry} <% -- 用EL輸出myCountry的值 -- %>
</ body >
</ html >
在IE中輸入如下的URL來測(cè)試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]-->
要注意的是,上述的三個(gè) Bean 標(biāo)簽都將變量保存到了 page 范圍內(nèi)(也就是 JSP 內(nèi)嵌對(duì)象 pageContext 中),并且不能改變變量的保存范圍。讀者在使用這三個(gè) Bean 標(biāo)簽時(shí)應(yīng)注意這一點(diǎn)。
二、訪問 Java 對(duì)象
1.<bean:define> 標(biāo)簽
<bean:define> 標(biāo)簽用來將 Java 對(duì)象的屬性值保存在變量中。 <bean:define> 標(biāo)簽有五個(gè)常用屬性:
( 1 ) id :變量名。
( 2 ) name : Java 對(duì)象名。
( 3 ) property : Java 對(duì)象屬性名。
( 4 ) scope : name 所指的 Java 對(duì)象所在的訪問,如果不指定,默認(rèn)是 page 范圍。
( 5 ) toScope : id 所指的變量要保存的范圍,如果不指定,默認(rèn)是 page 范圍。
2.<bean:size> 標(biāo)簽
<bean:size> 標(biāo)簽用來獲得集合( Map 、 Collection )或數(shù)組的長(zhǎng)度。 <bean:size> 標(biāo)簽有兩個(gè)常用的屬性:
( 1 ) id :一個(gè) Integer 變量
( 2 ) name :集合或數(shù)據(jù)的變量名。
下面的例子演示了如何使用本節(jié)所講的兩個(gè)
Bean
標(biāo)簽來訪問
Java
對(duì)象。在
<samples
工程目錄
>
目錄中建立一個(gè)
accessJavaObject.jsp
文件
,
代碼如下
:
<% @tagliburi = " http://struts.apache.org/tags-bean " prefix = " bean " %>
< html >
< head >
< title > 訪問Java對(duì)象 </ title >
</ head >
< body >
<% -- 建立actionform.HtmlTagsForm對(duì)象實(shí)例 -- %>
< jsp:useBean id ="htmlTagsForm" class ="actionform.HtmlTagsForm" />
< jsp:setProperty name ="htmlTagsForm" property ="name" value ="李寧" />
<% -- 測(cè)試bean:define標(biāo)簽 -- %>
< bean:define id ="myBeanVar" name ="htmlTagsForm" property ="name" />
${myBeanVar}
<%
String []arr = new String [ 10 ];
pageContext.setAttribute( " arr " ,arr);
%>
<% -- 測(cè)試bean:size標(biāo)簽 -- %>
< 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
來測(cè)試
accessJavaObject.jsp
:
http://localhost:8080/samples/accessJavaObject.jsp
三、訪問 JSP 內(nèi)嵌對(duì)象和 Struts 配置對(duì)象
1.<bean:page>
標(biāo)簽
<bean:page>
標(biāo)簽用來建立一個(gè)
page
范圍的變量,并可通過這個(gè)變量來訪問
JSP
的內(nèi)嵌對(duì)象。這個(gè)標(biāo)簽有兩個(gè)屬性:
( 1 ) id :變量名。
( 2 ) property : JSP 內(nèi)嵌對(duì)象名,必須是 application 、 config, 、 request 、 response 或 session 其中之一。
2.<bean:struts> 標(biāo)簽
<bean:struts> 標(biāo)簽用來建立一個(gè) page 范圍的變量,并可通過這個(gè)變量來訪問 Struts 的三個(gè)配置對(duì)象。這個(gè)標(biāo)簽有四個(gè)屬性:
( 1 ) id :變量名。
( 2 ) formBean : struts-config.xml 文件中的 <form-bean> 標(biāo)簽的 name 屬性值。如果指定這個(gè)屬性, <bean:struts> 會(huì)創(chuàng)建 org.apache.struts.action.ActionFormBean 類型的對(duì)象實(shí)例。
( 3 ) mapping : struts-config.xml 文件中的 <action> 標(biāo)簽的 path 屬性值。如果指定這個(gè)屬性, <bean:struts> 會(huì)創(chuàng)建 org.apache.struts.action.ActionMapping 類型的對(duì)象實(shí)例。
( 4 ) forward : struts-config.xml 文件中的 <global-forwards> 標(biāo)簽的子標(biāo)簽 <forward> 的 name 屬性值。如果指定這個(gè)屬性, <bean:struts> 會(huì)創(chuàng)建 org.apache.struts.action.ActionForward 類型的對(duì)象實(shí)例。
在使用 <bean:struts> 標(biāo)簽時(shí)應(yīng)注意,在滿足下面三種情況中的一種, <bean:struts> 就會(huì)拋出異常:
( 1 )同時(shí)使用了 formBean 、 mapping 和 forward 中的兩個(gè)或三個(gè)。
( 2 )未指定 formBean 、 mapping 和 forward
( 3 ) formBean 、 mapping 或 forward 所指的標(biāo)簽不存在。
下面的例子演示了 <bean:page> 和 <bean:struts> 標(biāo)簽的使用方法,在 <samples 工程目錄 > 目錄中建立一個(gè) accessEmbeddedObject.jsp 文件,代碼如下:
<% @tagliburi = " http://struts.apache.org/tags-bean " prefix = " bean " %>
< html >
< head >
< title > 訪問JSP內(nèi)嵌對(duì)象和Struts配置對(duì)象 </ 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> 標(biāo)簽
<bean:include> 標(biāo)簽用于獲得相對(duì)或絕對(duì)路徑的 Web 資源,并將這些資源的內(nèi)容保存到 page 范圍的變量中。 <bean:include> 標(biāo)簽有四個(gè)常用的屬性:
( 1 ) id :變量名。
( 2 ) href : Web 資源的絕對(duì)路徑。
( 3 ) page : Web 資源的相對(duì)路徑。以“ / ”開頭。
( 4 ) forward : struts-config.xml 文件 <global-forwards> 元素的子元素 <forward> 的 name 屬性值。如果指定這個(gè)屬性, <bean:include> 標(biāo)簽會(huì)自動(dòng)獲得 <forward> 的 path 屬性所指的 Web 資源的內(nèi)容。
2.<bean:resource> 標(biāo)簽
<bean:resource> 標(biāo)簽和 <bean:include> 標(biāo)簽類似,也用來獲得 Web 資源的內(nèi)容,但和 <bean:include> 的不同之處是 <bean:resource> 在訪問 Web 資源時(shí)(如 JSP 頁面),并不執(zhí)行這個(gè) JSP 頁面,而是將整個(gè) JSP 頁面的原始內(nèi)容保存到變量中,而 <bean:include> 在訪問這個(gè) JSP 頁面時(shí),會(huì)先執(zhí)行這個(gè) JSP 頁面,然后將 JSP 頁面執(zhí)行后的結(jié)果保存在變量中。因此,使用 <bean:include> 訪問 Web 資源和在 IE 中輸入相應(yīng)的 URL 的效果是一樣的。而 <bean:resource> 獲得的是 JSP 頁面的源代碼。
<bean:resource> 標(biāo)簽有三個(gè)屬性:
( 1 ) id :變量名。
( 2 ) name : Web 資源的相對(duì)路徑。以“ / ”開頭。
( 3 ) input :如果指定 input 屬性, id 變量為 java.io.InputStream 類型,如果未指定 input 屬性, id 變量為 String 類型。
3.<bean:message> 標(biāo)簽
<bean:message> 標(biāo)簽用于從 Java 屬性文件中獲得字符串信息。要注意的是, <bean:message> 標(biāo)簽獲得字符串信息后,并不將所獲得的信息保存在變量中,而是將其直接輸出,也就是在執(zhí)行 JSP 頁面時(shí),在生成客戶端內(nèi)容時(shí), <bean:message> 標(biāo)簽會(huì)被屬性文件中的字符串信息代替。 <bean:message> 標(biāo)簽的常用屬性如下:
( 1 ) key :屬性文件中的字符串信息鍵名。
( 2 ) bundle : struts-config.xml 文件中的 <message-resources> 標(biāo)簽的 key 值屬值。如果不指定 bundle 屬性,就使用默認(rèn)的屬性文件。
( 3 ) name :用于獲得鍵名的字符串變量名或?qū)ο髮?shí)例變量名。 <bean:message> 標(biāo)簽除了從 key 屬性中獲得鍵名,還可以通過將 key 保存在指定范圍的變量中,然后通過 name 屬性獲得這個(gè) key 。
( 4 ) property :獲得 key 的屬性名。如果 name 屬性為對(duì)象實(shí)例變量名,則 <bean:message> 標(biāo)簽會(huì)從 property 所指的屬性中獲得 key 。
( 5 ) scope : <bean:message> 標(biāo)簽獲得 name 變量的范圍。默認(rèn)值是 page 。
( 6 ) arg0 ~ arg4 :用于向帶參數(shù)的字符串信息中傳入?yún)?shù)值。分別對(duì)應(yīng)于屬性文件中的 {0} ~ {4} 。
下面的例子演示了本節(jié)所涉及到的三個(gè)標(biāo)簽的使用方法。在運(yùn)行這個(gè)例子之前,先在<samples工程目錄>"src"struts目錄中建立一個(gè)MyResources.properties文件,并輸入如下的內(nèi)容:
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>元素中添加如下的子標(biāo)簽:
<!--[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
工程目錄
>
中建立一個(gè)
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對(duì)象的name屬性獲得key -- %>
< bean:message bundle ="my" name ="form" property ="name" arg0 ="李寧" />
</ body >
</ html >
在IE中輸入如下的URL來測(cè)試accessResources.jsp:
http://localhost:8080/samples/accessResources.jsp
五、使用 <bean:write> 標(biāo)簽輸出信息
<bean:write> 用于輸出字符串變量及對(duì)象變量的屬性值。 <bean:write> 有如下六個(gè)常用的屬性:
1.name :變量名(包括字符串變量或?qū)ο笞兞浚?
2.property :如果 name 是對(duì)象變量, property 表示 name 對(duì)象的屬性。
3.filter :是否過濾輸出內(nèi)容中的 HTML 元素。如果 filter 為 true ,輸出內(nèi)容中的所有的 HTML 元素的敏感符號(hào)都會(huì)被替換成相應(yīng)的字符串(如“ < ”被替換成了“ < ”,“ > ”被替換成了“ > ”)。
4.format :用于格式化輸出內(nèi)容的格式化字符串。
5.formatKey :保存在屬性文件中的格式化字符串的 key 。
6.scope : name 變量保存的范圍。默認(rèn)是 page 范圍。
下面的例子演示了
<bean:write>
的常用方法。在運(yùn)行這個(gè)例子之前,在
<samples
工程目錄
>"src"struts"MyResources.properties
文件中加入如下的內(nèi)容:
<!--[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
工程目錄
>
目錄中建立一個(gè)
beanWrite.jsp
文件,代碼如下:
<% @pageimport = " actionform.HtmlTagsForm,java.util.* " %>
<% @tagliburi = " http://struts.apache.org/tags-bean " prefix = " bean " %>
< html >
< head >
< title > 測(cè)試bean:write </ tit
- 2009-01-19 08:42
- 瀏覽 58
- 評(píng)論(0)
- 相關(guān)推薦
發(fā)表評(píng)論
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元


評(píng)論