1. 程式人生 > >JSP學習筆記六之JavaBean

JSP學習筆記六之JavaBean

接著之前的內容繼續下去。接下來是講解JavaBean。

1.什麼是javabean

Javabean是特殊的java類。使用java語言編寫的,他的主要特徵如下:

   a 提供一個預設的無參的建構函式。

  b 需要被序列化並且實現了Serializable介面。

  c 有一系列的可讀寫的屬性。

  d 有一系列的getter和setter方法。

2.javabean屬性

一個JavaBean物件的屬性應該是可訪問的。這個屬性可以是任意合法的Java資料型別,包括自定義

Java類。一個JavaBean物件的屬性可以是可讀寫,或只讀,或只寫。JavaBean物件的屬性通過JavaBean實現類中提供的兩個方法來訪問:

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物件的例項

 

 e 使用set方法進行賦值

   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。