JSP教程之使用JavaBean完成商務邏輯的方法_JSP編程

來源:互聯網
上載者:User

本文執行個體講述了JSP教程之使用JavaBean完成商務邏輯的方法。分享給大家供大家參考。具體如下:

一、目標:

① 掌握什麼是JavaBean;
② 掌握如何編寫JavaBean;
③ 掌握如何在JSP中訪問JavaBean;
④ 理解JSP中對象的4個作用範圍。

二、主要內容:

通過把上一講中login_process.jsp中的驗證過程進行封裝形成JavaBean,然後在JSP頁面中調用這個JavaBean,介紹JavaBean的編寫和訪問。
通過簡單一實例介紹JavaBean對象的4個作用範圍。

1、什麼是JavaBean

JavaBean是使用Java語言編寫的組件。組件是組成一個大的系統的一部份,通常不同獨立運行。組件能夠完成特定的功能,並且這些功能主要是共用的。
JavaBean是一種特殊的Java類。特殊在:通常要提供無參數的構造方法;外界不需要知道它的具體實現,通常屬性是私人的,需要提供公有的對屬性進行操作的方法;應該有一些業務方法。

2、例:對使用者資訊進行驗證

package javabean;public class User{  private String username;  private String userpass;  public String getUsername()  {   return username;  }  public void setUsername(String username)  {   this.username = username;  }  public String getUserpass()  {   return userpass;  }  public void setUserpass(String userpass)  {   this.userpass = userpass;  }  public boolean check()  {   if(username==null || userpass==null)     return false;   if(username.equals("zhangsan") && userpass.equals("lisi"))   {     return true;   }else{     return false;   }  }}

3、在JSP中如何調用JavaBean

首先,在Java中的調用情況:

import javabean;…  User user = new User(); // 定義對象,並且執行個體化  user.setUsername("zaaaa"); // 對成員變數進行初始化  user.setUserpass("sssss");  // 對使用者口令進行初始化  boolean b = user.check();  // 調用業務方法進行驗證

1) 建立對象

複製代碼 代碼如下:
<jsp:useBean id="" class="" scope=""/>

作用:執行個體化JavaBean的對象,或者尋找到JavaBean的對象。

id屬性工作表示建立的對象的名字,class是JavaBean的完整類名,scope屬性指出建立的變數的作用範圍。
scope的作用範圍有4個:page request session application
page表示當前頁面,實際上是當前的JSP檔案對應的Java類的對象;
request表示一次請求,從我們發送出去請求開始到系統對我們進行響應,這之間就是一次請求。如果一次請求只涉及一個JSP頁面,page和request的效果是相同的。
例如:登入功能,顯示第一個頁面的時候,這時候page和request的作用範圍是相同的。提交之後,如果登入成功,這時候涉及兩個檔案login_process.jsp和success.jsp,每個檔案對應一個page,但是兩個檔案屬於一個request。
session,表示會話。對於Web應用的每個用戶端來說都對應一個對象,這個對象就是session,如果JavaBean對象的作用範圍設定為session,相當於把JavaBean對象儲存在了session對象中,在用戶端的整個訪問過程中都可以訪問這個對象。
application,表示應用。如果把JavaBean對象的作用範圍設定為application,這個應用的所有的使用者在所有的介面都可以訪問這個對象。

例:<jsp:useBean id="user" class="javabean.User" scope="request"/>
測試(關於4個作用範圍):

編寫page.jsp檔案如下:

<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><c:set var="pageAttribute" value="pppp" scope="page"/><c:set var="requestAttribute" value="rrrrr" scope="request"/><c:set var="sessionAttribute" value="ssss" scope="session"/><c:set var="applicationAttribute" value="aaaa" scope="application"/><jsp:include page="success.jsp"/>

page.jsp中輸出資訊:

${pageScope.pageAttribute}${requestScope.requestAttribute}${sessionScope.sessionAttribute}${applicationScope.applicationAttribute}

其中:<c:set>標籤用於儲存資訊,var指出變數的名字,value指出變數的值(可以使用運算式),scope指出變數的儲存範圍。

${pageScope.pageAttribute}用於訪問page範圍內的pageAttribute屬性,${requestScope.requestAttribute}用於訪問request範圍內的requestScope屬性,依次類推。
 
編寫request.jsp檔案如下:

<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

request.jsp中輸出資訊:

${pageScope.pageAttribute}${requestScope.requestAttribute}${sessionScope.sessionAttribute}${applicationScope.applicationAttribute}<br><a href="session.jsp">訪問session</a>

編寫session.jsp檔案如下:

<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

session.jsp中輸出資訊:

${pageScope.pageAttribute}${requestScope.requestAttribute}${sessionScope.sessionAttribute}${applicationScope.applicationAttribute}

編寫application.jsp檔案如下:

<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

application.jsp中輸出資訊:

${pageScope.pageAttribute}${requestScope.requestAttribute}${sessionScope.sessionAttribute}${applicationScope.applicationAttribute}

運行過程:

運行page.jsp,得到如下結果:

request.jsp中輸出資訊:rrrr ssss aaaa
page.jsp中輸出資訊:pppp rrrr ssss aaaa
分析:因為page.jsp和request.jsp屬於同一次請求,所以共用request對象,session對象和application對象,但是不能顯示page中儲存的資訊。

點擊"訪問session"進行session.jsp

session.jsp中輸出資訊:ssss aaaa

分析:與前面不屬於同一次請求,所以不能訪問request和page資訊,只能訪問session和application。

重新開啟一個瀏覽器,訪問application.jsp
application.jsp中輸出資訊:aaaa
分析:屬於不同的用戶端,所以只能共用application對象,只能看到application中的資訊。

2) 對屬性賦值

<jsp:setProperty name="" property="" value=""/>
name指出JavaBean對象的名字,property指出屬性的名字,value要賦的值。

例:<jsp:setProperty name="user" property="username" value="zhangsan"/>

如果value屬性不指定,這時候會從請求對象尋找名字為username的表單元素,如果有救賦值。相當於下面的代碼:

String username = request.getParameter("username");user.setUsername(username);

如果省略了value屬性,同時把property屬性設定為"*",相當於:

String username = request.getParameter("username");user.setUsername(username);String userpass = request.getParameter("usernpass");user.setUsernpass (userpass);

如果表單元素的名字與JavaBean屬性名稱字不一致的時候,可以通過param屬性指定使用哪個表單元素。

3) 嵌入Java代碼調用方法

<%  boolean b = user.check();%>

4) 擷取JavaBean屬性

複製代碼 代碼如下:
<jsp:getProperty name="" property=""/>

4、 執行個體:修改login_process.jsp

<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!--建立對象--><jsp:useBean id="user" class="javabean.User" scope="request"/><!--對對象進行初始化--><jsp:setProperty name="user" property="*"/><!-- 調用對象的方法 --><%  boolean b = user.check();  request.setAttribute("b",new Boolean(b));  // 在request中儲存資訊,第一個參數是名字,第二個參數對象本身%><!-- 根據結果進行判斷 --><c:if test="${b}">  <jsp:include page="success.jsp"/></c:if><c:if test="${!b}">  <jsp:include page="failure.jsp"/></c:if><br>使用者資訊:<jsp:getProperty name="user" property="username"/><jsp:getProperty name="user" property="userpass"/>

運行:編譯之前編寫好的Java檔案User.java。然後把編譯好的檔案放在工程的WEB-INF目錄的classes子目錄中。

運行之後效果是相同的。

但是分析上面的代碼,我們發現裡面還是嵌入了Java代碼,這是因為JSP並沒有提供很好的標籤對JavaBean的訪問進行調用。如果想使用標籤對業務方法調用,需要編寫自訂標籤,比較麻煩。下面介紹一個折中的方法。

5、執行個體:重構login_process.jsp

在User.java中添加如下方法:

public boolean getResult(){   return check();}

雖然JSP沒有提供訪問業務方法的標籤,但是提供了對屬性進行訪問的方式,所以該方法通過提供result屬性來間接的調用check業務方法。

修改login_process.jsp檔案如下:

<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><jsp:useBean id="user" class="javabean.User" scope="request"/><jsp:setProperty name="user" property="*"/><c:if test="${user.result}">  <jsp:include page="success.jsp"/></c:if><c:if test="${!user.result}">  <jsp:include page="failure.jsp"/></c:if>

希望本文所述對大家的JSP程式設計有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.