日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts1.x系列教程(6):Bean标签库

發布時間:2025/5/22 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts1.x系列教程(6):Bean标签库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Bean標簽庫共有11個標簽。這些標簽可以完成如下五種工作: 1.?????? 獲得HTTP請求信息 2.?????? 訪問Java對象 3.?????? 訪問JSP內嵌對象和Struts配置對象 4.?????? 訪問Web資源和屬性文件 5.?????? 輸出信息 下面我們就來分別介紹一下如何使用Bean標簽庫中的標簽來完成上述的工作。 一、獲得HTTP請求信息
??? 使用Bean標簽庫中的標簽可以訪問CookieHTTP請求頭以及請求參數。

??? 1. ?<bean:cookie>標簽 <bean:cookie>標簽用于獲得一個Cookie對象,并創建一個page范圍的變量來保存這個Cookie對象。<bean:cookie>標簽有三個常用屬性: 1id:用于保存Cookie對象的變量名。 2nameCookie 3valueCookie的默認值。如果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>標簽有三個常用屬性: 1id:用于保存HTTP請求頭字段值的變量名。 2nameHTTP請求頭字段名。 3valueHTTP請求頭字段的默認值。如果name所指的HTTP請求頭字段不存在,<bean:header>標簽就會將value屬性的值存在page范圍的變量中。如果不指定value屬性,且指定的HTTP請求頭字段不存在時,<bean:header>標簽就會拋出javax.servlet.jsp.JspException異常。 3.?<bean:parameter>標簽 <bean:parameter>標簽用于獲得HTTP請求參數的值,并創建一個page范圍的變量來保存所獲得的HTTP請求參數的值。<bean:parameter>標簽有三個常用屬性: 1id:用于保存HTTP請求參數值的變量名。 2nameHTTP請求參數名。 3valueHTTP請求參數值的默認值。如果name所指的HTTP請求參數不存在,<bean:parameter >標簽就會將value屬性的值存在page范圍的變量中。如果不指定value屬性,且指定的HTTP請求參數不存在時,<bean:parameter>標簽就會拋出javax.servlet.jsp.JspException異常。 下面的例子演示了如何使用本節所講的三個Bean標簽來獲得HTTP請求信息,在<samples工程目錄>中建立一個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.?<bean:define>標簽 <bean:define>標簽用來將Java對象的屬性值保存在變量中。<bean:define>標簽有五個常用屬性: 1id:變量名。 2nameJava對象名。 3propertyJava對象屬性名。 4scopename所指的Java對象所在的訪問,如果不指定,默認是page范圍。 5toScopeid所指的變量要保存的范圍,如果不指定,默認是page范圍。 ?2.?<bean:size>標簽 <bean:size>標簽用來獲得集合(MapCollection)或數組的長度。<bean:size>標簽有兩個常用的屬性: 1id:一個Integer變量 2name:集合或數據的變量名。 下面的例子演示了如何使用本節所講的兩個Bean標簽來訪問Java對象。在<samples工程目錄>目錄中建立一個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.?<bean:page>標簽

??? <bean:page>標簽用來建立一個page范圍的變量,并可通過這個變量來訪問JSP的內嵌對象。這個標簽有兩個屬性: 1id:變量名。 2propertyJSP內嵌對象名,必須是applicationconfig,requestresponsesession其中之一。 ??? 2.?<bean:struts>標簽 <bean:struts>標簽用來建立一個page范圍的變量,并可通過這個變量來訪問Struts的三個配置對象。這個標簽有四個屬性: 1id:變量名。 2formBeanstruts-config.xml文件中的<form-bean>標簽的name屬性值。如果指定這個屬性,<bean:struts>會創建org.apache.struts.action.ActionFormBean類型的對象實例。 3mappingstruts-config.xml文件中的<action>標簽的path屬性值。如果指定這個屬性,<bean:struts>會創建org.apache.struts.action.ActionMapping類型的對象實例。 4forwardstruts-config.xml文件中的<global-forwards>標簽的子標簽<forward>name屬性值。如果指定這個屬性,<bean:struts>會創建org.apache.struts.action.ActionForward類型的對象實例。 在使用<bean:struts>標簽時應注意,在滿足下面三種情況中的一種,<bean:struts>就會拋出異常: 1)同時使用了formBeanmappingforward中的兩個或三個。 2)未指定formBeanmappingforward 3formBeanmappingforward所指的標簽不存在。 下面的例子演示了<bean:page><bean:struts>標簽的使用方法,在<samples工程目錄>目錄中建立一個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.?<bean:include>標簽 <bean:include>標簽用于獲得相對或絕對路徑的Web資源,并將這些資源的內容保存到page范圍的變量中。<bean:include>標簽有四個常用的屬性: 1id:變量名。 2hrefWeb資源的絕對路徑。 3pageWeb資源的相對路徑。以“/”開頭。 4forwardstruts-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>標簽有三個屬性: 1id:變量名。 2nameWeb資源的相對路徑。以“/”開頭。 3input:如果指定input屬性,id變量為java.io.InputStream類型,如果未指定input屬性,id變量為String類型。 ?3.?<bean:message>標簽 <bean:message>標簽用于從Java屬性文件中獲得字符串信息。要注意的是,<bean:message>標簽獲得字符串信息后,并不將所獲得的信息保存在變量中,而是將其直接輸出,也就是在執行JSP頁面時,在生成客戶端內容時,<bean:message>標簽會被屬性文件中的字符串信息代替。<bean:message>標簽的常用屬性如下:??? 1key:屬性文件中的字符串信息鍵名。 2bundlestruts-config.xml文件中的<message-resources>標簽的key值屬值。如果不指定bundle屬性,就使用默認的屬性文件。 3name:用于獲得鍵名的字符串變量名或對象實例變量名。<bean:message>標簽除了從key屬性中獲得鍵名,還可以通過將key保存在指定范圍的變量中,然后通過name屬性獲得這個key 4property:獲得key的屬性名。如果name屬性為對象實例變量名,則<bean:message>標簽會從property所指的屬性中獲得key 5scope<bean:message>標簽獲得name變量的范圍。默認值是page 6arg0 ~ arg4:用于向帶參數的字符串信息中傳入參數值。分別對應于屬性文件中的{0} ~ {4} 下面的例子演示了本節所涉及到的三個標簽的使用方法。在運行這個例子之前,先在<samples工程目錄>"src"struts目錄中建立一個MyResources.properties文件,并輸入如下的內容:???

greet?=?hello?world
myGreet?
=?hello?{0}

然后在struts-config.xml中的<struts-config>元素中添加如下的子標簽:

??<message-resources?parameter="struts.MyResources"?key="my"?/>
最后在<samples工程目錄>中建立一個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


五、使用<bean:write>標簽輸出信息 <bean:write>用于輸出字符串變量及對象變量的屬性值。<bean:write>有如下六個常用的屬性: 1.?name:變量名(包括字符串變量或對象變量)。 2.?property:如果name是對象變量,property表示name對象的屬性。 3.?filter:是否過濾輸出內容中的HTML元素。如果filtertrue,輸出內容中的所有的HTML元素的敏感符號都會被替換成相應的字符串(如“<”被替換成了“&lt;”,“>”被替換成了“&gt;”)。 4.?format:用于格式化輸出內容的格式化字符串。 5.?formatKey:保存在屬性文件中的格式化字符串的key 6.?scopename變量保存的范圍。默認是page范圍。 下面的例子演示了<bean:write>的常用方法。在運行這個例子之前,在<samples工程目錄>"src"struts"MyResources.properties文件中加入如下的內容:

formatDate?=?yyyy-MM-dd?hh:mm:ss
<samples工程目錄>目錄中建立一個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(
"<b>工程師</b>");
??????????????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

總結

以上是生活随笔為你收集整理的Struts1.x系列教程(6):Bean标签库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。