JSP學習筆記六之JavaBean
接著之前的內容繼續下去。接下來是講解JavaBean。
1.什麼是javabean
Javabean是特殊的java類。使用java語言編寫的,他的主要特徵如下:
a 提供一個預設的無參的建構函式。
b 需要被序列化並且實現了Serializable介面。
c 有一系列的可讀寫的屬性。
d 有一系列的getter和setter方法。
2.javabean屬性
一個JavaBean物件的屬性應該是可訪問的。這個屬性可以是任意合法的Java資料型別,包括自定義
getPropertyName():舉例來說,如果屬性的名稱為myName,那麼這個方法的名字就要寫成getMyName()來讀取這個屬性。這個方法也稱為訪問器。
setPropertyName():舉例來說,如果屬性的名稱為myName,那麼這個方法的名字就要寫成setMyName()來寫入這個屬性。這個方法也稱為寫入器。
一個只讀的屬性只提供getPropertyName()方法,一個只寫的屬性只提供setPropertyName()方法。
3.如何建立javabean物件
使用普通方式來應用javabean。就像使用普通java類一樣。
a 建立一個web project專案。
b 在src檔案下,建立一個包。在包中建立一個類,滿足設計原則即可。
c 在webRoot檔案的index.jsp頁面中通過<%@ page import=”包名.類名”%>。
d 通過使用new來建立javabean物件的例項
f 使用get方法進行取值。
具體步驟如下圖所示:
最後執行的結果如下:
4、使用javabean的動作標籤useBeans來例項化物件
常用標籤如下:
useBeans 例項化物件
setProperty 設定物件屬性值
getProperty 獲取物件屬性值
<body>
<jsp:useBean id="myUsers" class="com.wq.Users" scope="page"/>
<h1>使用useBean動作建立javabean的例項</h1>
<% myUsers.setUsername("lulei") ;
myUsers.setPassword("123456");
%>
<hr>
使用者名稱:<%=myUsers.getUsername() %><br>
密碼:<%=myUsers.getPassword() %><br>
</body>
結果如下:
5、<jsp: setProperty>動作、<jsp: getProperty>動作和javaBean的四種作用域
<jsp:setProperty>動作:給【已經例項化的Javabean物件的屬性賦值】,一共有四種形式
1、需要表單提交屬性:
<jsp:setProperty name="Javabean例項名" property="*"/>
與之前頁面提交的表單的【所有屬性進行匹配】,若有與javabean類屬性名相同的,則進行賦值。比如表壇提交了username="xxx",而javabean裡有username屬性,則對其進行賦值。
2、需要表單提交屬性:
<jsp:setPropery name="Javabean例項名" property="javabean屬性名" />
對指定的屬性進行匹配
3、手動設定屬性:
<jsp:setProperty name = "Javabean例項名" property="Javabean屬性名" value="BeanValue" />
4、與request引數有關,通過url傳參 :
<jsp:setProperty name="Javabean例項名" property="propertyName" param="request物件中的引數名" />
測試程式碼如下:
dologin.jsp
<body>
<jsp:useBean id="myUsers" class="com.wq.Users" scope="page"/>
<h1>setProperty動作元素</h1>
<hr>
<!--根據表單自動匹配所有的屬性 -->
<%--
<jsp:setProperty name="myUsers" property="*"/>
--%>
<!--根據表單匹配部分的屬性 -->
<%--
<jsp:setProperty name="myUsers" property="username"/>
--%>
<!--根表單無關,通過手工賦值給屬性 -->
<%--
<jsp:setProperty name="myUsers" property="username" value="lulei"/>
<jsp:setProperty name="myUsers" property="password" value="888888"/>
--%>
<!--通過URL傳引數給屬性賦值 -->
<!--表單中action屬性url傳遞引數值:action=“dologin.jsp?mypass=999999”-->
<jsp:setProperty name="myUsers" property="username"/>
<jsp:setProperty name="myUsers" property="password" param="mypass"/>
<!-- 使用傳統的表示式方式來獲取使用者名稱和密碼 -->
<%--
使用者名稱:<%=myUsers.getUsername() %><br>
密碼:<%=myUsers.getPassword() %><br>
--%>
<!-- 使用getProperty方式來獲取使用者名稱和密碼 -->
使用者名稱:<jsp:getProperty name="myUsers" property="username"/> <br>
密碼:<jsp:getProperty name="myUsers" property="password"/><br>
<br>
<br>
<a href="testScope.jsp">測試javabean的四個作用域範圍</a>
<%
//進行請求轉發 request.getRequestDispatcher("testScope.jsp").forward(request, response);
%>
</body>
這裡涉及到了java的動作元素。 java的動作元素:
(1)JSP動作元素為請求處理階段提供資訊。
(2)動作元素遵循XML元素的語法。有一個包含元素名的開始標籤,可以有屬性、可選內容,以及結束標籤。
--------------------------------------------------------------------*----------------------------------------------------------------------------
JSP動作分為以下幾類:
(1)與存取JavaBean有關的6個元素。 如:
<jsp:useBean> <jsp:setProperty> <jsp:getProperty>
(2)6個動作元素。 如:
<jsp:include> <jsp:forward> <jsp:param> <jsp:plugin> <jsp:params> <jsp:fallback>
(3)與Document有關的6個元素:
<jsp:root> <jsp:declaration> <jsp:scriptlet> <jsp:expression> <jsp:text> <jsp:output>
(4)用來動態生成XML元素標籤的3個動作:
<jsp:attribute> <jsp:body> <jsp:element>
(5)用在Tag File中的2個元素:
<jsp:invoke> <jsp:dobody>
testScope.jsp
<body>
<h1>Javabean的四個作用域範圍</h1>
<hr>
<jsp:useBean id="myUsers" class="com.wq.Users" <span style="color:#ff0000;">scope="page"</span>/>
使用者名稱:<jsp:getProperty name="myUsers" property="username"/><br>
密碼:<jsp:getProperty name="myUsers" property="password"/><br>
<!-- 使用內建物件獲取使用者名稱和密碼 -->
<hr>
<%--
使用者名稱:<%=((Users)application.getAttribute("myUsers")).getUsername()%><br>
密碼:<%=((Users)application.getAttribute("myUsers")).getPassword() %><br>
--%>
<%--
使用者名稱:<%=((Users)session.getAttribute("myUsers")).getUsername()%><br>
密碼:<%=((Users)session.getAttribute("myUsers")).getPassword() %><br>
--%>
<%--
使用者名稱:<%=((Users)request.getAttribute("myUsers")).getUsername()%><br>
密碼:<%=((Users)request.getAttribute("myUsers")).getPassword() %><br>
--%>
<%
String username = "";
String password = "";
if(pageContext.getAttribute("myUsers")!=null )
{
username = ((Users)pageContext.getAttribute("myUsers")).getUsername();
password = ((Users)pageContext.getAttribute("myUsers")).getPassword();
}
%>
使用者名稱:<%=username%><br>
密碼:<%=password%><br>
</body>
結果顯示:
page作用域:
application作用域:(記得將所有的Scope設為application)
session作用域:(記得將所有的Scope設為session)
request作用域:(記得將所有的Scope設為request)
最後總結一下四種作用域:
1.page指當前頁面有效。在一個jsp頁面裡有效。
2.request 指在一次請求的全過程中有效,即從http請求到伺服器處理結束,返回響應的整個過程,存放在HttpServletRequest物件中。在這個過程中可以使用forward方式跳轉多個jsp。在這些頁面裡你都可以使用這個變數。
3.Session是使用者全域性變數,在整個會話期間都有效。只要頁面不關閉就一直有效(或者直到使用者一直未活動導致會話過期,預設session過期時間為30分鐘,或呼叫HttpSession的invalidate()方法)。存放在HttpSession物件中。
4.application是程式全域性變數,對每個使用者每個頁面都有效。存放在ServletContext物件中。它的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。
總結:當資料只需要在下一個forward有用 時,用request就夠了;若資料不只是在下一個forward有用 時,就用session。如果是上下文,環境資訊之類的變數,就用application。