在JSP頁面中使用JavaBean


一、JavaBean

JavaBean是符合某種特定規范的Java類,通過JavaBean可以有效減少代碼冗余,解決代碼重復編寫問題,功能區分明確,提高代碼可維護性。

JavaBean的設計原則:共有類+無參的共有構造方法+getter和setter方法+屬性私有

二、JSP動作元素

JSP動作元素(action elements),動作元素為請求處理階段提供信息。動作元素遵循XML元素的語法,有一個包含元素名的開始標簽,可以有屬性、可選的內容、與開始標簽匹配的結束標簽。

JSP動作的分類:

1、與存取JavaBean有關的動作

<jsp:useBean><jsp:setProperty><jsp:getProperty>

2、JSP1.2開始有的基本元素,包括6個動作元素

<jsp:include><jsp:forward><jsp:param><jsp:plugin><jsp:params><jsp:fallback>

3、JSP2.0新增加的元素,主要與JSP Document有關,包括6個元素

<jsp:root><jsp:declaration><jsp:scriptlet><jsp:expression><jsp:text><jsp:output>

4、JSP2.0新增加的元素,主要是用來動態生成XML元素標簽的值,包括3個動作

<jsp:attribute><jsp:body><jsp:element>

5、JSP2.0新增加的元素,主要用在Tag File中,有2個元素

<jsp:invoke><jsp:dobody>

三、在JSP頁面中使用JavaBean

3.1、使用普通方式創建JavaBean的實例

  <body>
    <% 
       User user = new User();
       user.setName("admin"); //設置用戶名
       user.setPwd("000000");//設置密碼
    %>
    <h1>使用普通方式創建JavaBean的實例</h1>
    <hr>
       用戶名:<%=user.getName() %><br>
       密碼:<%=user.getPwd() %><br>
  </body>

3.2 在JSP頁面通過動作標簽來使用JavaBean

1、<jsp:useBean>在JSP頁面中實例化或者在指定范圍內使用JavaBean

<jsp:useBean id="標示符" class="類名" scope="作用范圍">

示例代碼:

  <body>
    <jsp:useBean id="user" class="model.User" scope="page">
    <h1>使用useBean動作創建JavaBean的實例</h1>
    <hr>
       用戶名:<%=user.getName() %><br>
       密碼:<%=user.getPwd() %><br>
  </body>

【注】用戶名和密碼的頁面顯示結果都為null,因為沒有給該實例的屬性賦值

2、<jsp:setProperty>給已經實例化的JavaBean對象的屬性賦值,共有四種形式

<!-- 全部屬性與表單關聯 -->
<jsp:setProperty name="JavaBean實例名" property="*"/>
<!-- 部分屬性與表單關聯-->
<jsp:setProperty name="JavaBean實例名" property="指定屬性名"/>
<!-- 手工設置屬性-->
<jsp:setProperty name="JavaBean實例名" property="指定屬性名" value="指定屬性值"/>
<!-- 與request參數關聯-->
<jsp:setProperty name="JavaBean實例名" property="指定屬性名" value="指定屬性值" param="request對象中的參數名"/>

3、<jsp:getProperty>獲取指定JavaBean對象的屬性值

<jsp:getProperty name="JavaBean實例名" property="屬性名"/>

綜合實例

<body>
    <jsp:useBean id="myUser" class="model.User" scope="page"/>
    <h1>setProperty動作元素</h1>
    <hr>
   <!--根據表單自動匹配所有的屬性 -->
   <%-- 
   <jsp:setProperty name="myUser" property="*"/>  
   --%>
   <!--根據表單匹配所有部分的屬性 -->
   <%-- 
   <jsp:setProperty name="myUser" property="name"/>  
   --%>
   <!--根表單無關,通過手工賦值給屬性 -->
   <%-- 
   <jsp:setProperty name="myUser" property="name" value="admin"/>
   <jsp:setProperty name="myUser" property="pwd" value="000000"/>
   --%>
   <!--通過URL傳參數給屬性賦值 -->
   <jsp:setProperty name="myUsers" property="name"/>
   <jsp:setProperty name="myUsers" property="pwd" param="password"/>
   <!-- 使用傳統的表達式方式來獲取用戶名和密碼 -->     
      用戶名:<%=myUser.getName() %><br>
      密碼:<%=myUser.getPwd() %><br>  
   <!-- 使用getProperty方式來獲取用戶名和密碼 -->
      用戶名:<jsp:getProperty name="myUser" property="name"/><br>
      密碼:<jsp:getProperty name="myUser" property="pwd"/><br>   
  </body>

3.3 JavaBean的4個作用域范圍

①page:僅在當前頁面有效

②request:可以通過HttpRequest.getAttribute()方法獲得JavaBean對象

③session:可以通過HttpSession.getAttribute()方法獲得JavaBean對象

④application:可以通過application.getAttribute()方法獲得JavaBean對象

  <body>
    <h1>Javabean的四個作用域范圍</h1>
    <hr>
    <jsp:useBean id="myUser" class="model.User" scope="page"/>
       用戶名:<jsp:getProperty name="myUser" property="name"/><br>
       密碼:<jsp:getProperty name="myUser" property="pwd"/><br>
    <!-- 使用內置對象獲取用戶名和密碼 -->
    <hr>
   <%-- 
       用戶名:<%=((Users)application.getAttribute("myUser")).getName()%><br>
       密碼:<%=((Users)application.getAttribute("myUser")).getPwd() %><br>
   --%>
   <%-- 
       用戶名:<%=((Users)session.getAttribute("myUser")).getName()%><br>
       密碼:<%=((Users)session.getAttribute("myUser")).getPwd() %><br>
   --%>
   <%-- 
       用戶名:<%=((Users)request.getAttribute("myUser")).getName()%><br>
       密碼:<%=((Users)request.getAttribute("myUser")).getPwd() %><br>
   --%>
   <% 
       String username = "";
       String password = "";
       if(pageContext.getAttribute("myUser")!=null )
       {
          username = ((Users)pageContext.getAttribute("myUser")).getName();
          password = ((Users)pageContext.getAttribute("myUser")).getPwd();
       }       
   %>    
       用戶名:<%=username%><br>
       密碼:<%=password%><br>   
  </body>

【注】<a href="url">標簽是一次請求重定向,相當於重新發送了一次request,要想request域起作用,應該使用請求轉發,即request.getRequestDispatcher(url).forward(request, response);

 

參考資料:慕課網【JAVA遇見HTML——JSP篇】http://www.imooc.com/learn/166






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM