JSP教程之使用JavaBean完成業(yè)務(wù)邏輯的方法
本文實例講述了JSP教程之使用JavaBean完成業(yè)務(wù)邏輯的方法。分享給大家供大家參考。具體如下:
一、目標(biāo):
① 掌握什么是JavaBean;
② 掌握如何編寫JavaBean;
③ 掌握如何在JSP中訪問JavaBean;
④ 理解JSP中對象的4個作用范圍。
二、主要內(nèi)容:
通過把上一講中l(wèi)ogin_process.jsp中的驗證過程進行封裝形成JavaBean,然后在JSP頁面中調(diào)用這個JavaBean,介紹JavaBean的編寫和訪問。
通過簡單實例介紹JavaBean對象的4個作用范圍。
1、什么是JavaBean
JavaBean是使用Java語言編寫的組件。組件是組成一個大的系統(tǒng)的一部份,通常不同獨立運行。組件能夠完成特定的功能,并且這些功能主要是共享的。
JavaBean是一種特殊的Java類。特殊在:通常要提供無參數(shù)的構(gòu)造方法;外界不需要知道它的具體實現(xiàn),通常屬性是私有的,需要提供公有的對屬性進行操作的方法;應(yīng)該有一些業(yè)務(wù)方法。
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中如何調(diào)用JavaBean
首先,在Java中的調(diào)用情況:
import javabean;
…
User user = new User(); // 定義對象,并且實例化
user.setUsername("zaaaa"); // 對成員變量進行初始化
user.setUserpass("sssss"); // 對用戶口令進行初始化
boolean b = user.check(); // 調(diào)用業(yè)務(wù)方法進行驗證
1) 創(chuàng)建對象
作用:實例化JavaBean的對象,或者查找到JavaBean的對象。
id屬性表示創(chuàng)建的對象的名字,class是JavaBean的完整類名,scope屬性指出創(chuàng)建的變量的作用范圍。
scope的作用范圍有4個:page request session application
page表示當(dāng)前頁面,實際上是當(dāng)前的JSP文件對應(yīng)的Java類的對象;
request表示一次請求,從我們發(fā)送出去請求開始到系統(tǒng)對我們進行響應(yīng),這之間就是一次請求。如果一次請求只涉及一個JSP頁面,page和request的效果是相同的。
例如:登錄功能,顯示第一個頁面的時候,這時候page和request的作用范圍是相同的。提交之后,如果登錄成功,這時候涉及兩個文件login_process.jsp和success.jsp,每個文件對應(yīng)一個page,但是兩個文件屬于一個request。
session,表示會話。對于Web應(yīng)用的每個客戶端來說都對應(yīng)一個對象,這個對象就是session,如果JavaBean對象的作用范圍設(shè)置為session,相當(dāng)于把JavaBean對象保存在了session對象中,在客戶端的整個訪問過程中都可以訪問這個對象。
application,表示應(yīng)用。如果把JavaBean對象的作用范圍設(shè)置為application,這個應(yīng)用的所有的用戶在所有的界面都可以訪問這個對象。
例:<jsp:useBean id="user" class="javabean.User" scope="request"/>
測試(關(guān)于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>標(biāo)簽用于存儲信息,var指出變量的名字,value指出變量的值(可以使用表達式),scope指出變量的存儲范圍。
${pageScope.pageAttribute}用于訪問page范圍內(nèi)的pageAttribute屬性,${requestScope.requestAttribute}用于訪問request范圍內(nèi)的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,得到如下結(jié)果:
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的表單元素,如果有救賦值。相當(dāng)于下面的代碼:
String username = request.getParameter("username");
user.setUsername(username);
如果省略了value屬性,同時把property屬性設(shè)置為"*",相當(dāng)于:
String username = request.getParameter("username");
user.setUsername(username);
String userpass = request.getParameter("usernpass");
user.setUsernpass (userpass);
如果表單元素的名字與JavaBean屬性名字不一致的時候,可以通過param屬性指定使用哪個表單元素。
3) 嵌入Java代碼調(diào)用方法
<% boolean b = user.check(); %>
4) 獲取JavaBean屬性
4、 實例:修改login_process.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!--創(chuàng)建對象-->
<jsp:useBean id="user" class="javabean.User" scope="request"/>
<!--對對象進行初始化-->
<jsp:setProperty name="user" property="*"/>
<!-- 調(diào)用對象的方法 -->
<%
boolean b = user.check();
request.setAttribute("b",new Boolean(b));
// 在request中保存信息,第一個參數(shù)是名字,第二個參數(shù)對象本身
%>
<!-- 根據(jù)結(jié)果進行判斷 -->
<c:if test="$">
<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子目錄中。
運行之后效果是相同的。
但是分析上面的代碼,我們發(fā)現(xiàn)里面還是嵌入了Java代碼,這是因為JSP并沒有提供很好的標(biāo)簽對JavaBean的訪問進行調(diào)用。如果想使用標(biāo)簽對業(yè)務(wù)方法調(diào)用,需要編寫自定義標(biāo)簽,比較麻煩。下面介紹一個折中的方法。
5、實例:重構(gòu)login_process.jsp
在User.java中添加如下方法:
public boolean getResult()
{
return check();
}
雖然JSP沒有提供訪問業(yè)務(wù)方法的標(biāo)簽,但是提供了對屬性進行訪問的方式,所以該方法通過提供result屬性來間接的調(diào)用check業(yè)務(wù)方法。
修改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程序設(shè)計有所幫助。
相關(guān)文章
ajax+json+Struts2實現(xiàn)list傳遞實例講解
應(yīng)付學(xué)習(xí)需要,需要通過ajax來獲取后臺的List集合里面的值,特做了一個實例并附上演示效果,希望本例對你有所幫助2013-04-04
WIN2000+PHP+MYSQL+TOMCAT+JSP完全整合安裝手冊
WIN2000+PHP+MYSQL+TOMCAT+JSP完全整合安裝手冊...2006-10-10
JBuilder2005開發(fā)Web應(yīng)用程序
JBuilder2005開發(fā)Web應(yīng)用程序...2006-10-10

