Jsp中的session使用Jsp的session是使用bean的一個生存期限,一般為page,session意思是在這個用戶沒有離開網(wǎng)站之前一直有效,如果無法判斷用戶何時離開,一般依據(jù)系統(tǒng)設(shè)定,tomcat中設(shè)定為30分鐘.我們使用seesion功能,可以達到多個jsp程序從操作同一個java bean, 那么這個java bean可以作為我們傳統(tǒng)意義上的"全局變量池".(在java中我們可以使用static靜態(tài)化一個變量和方法,使用singleton唯一化對象.) 在項目實踐中,我們Jsp程序中很多參數(shù)需要從數(shù)據(jù)庫中讀取,有的參數(shù)實際讀取一次就可以,如果設(shè)計成每個用戶每產(chǎn)生一個頁面都要讀取數(shù)據(jù)庫,很顯然,數(shù)據(jù)庫的負(fù)載很大,同時也浪費時間,雖然可能有數(shù)據(jù)庫連接池優(yōu)化,但是盡量少使用數(shù)據(jù)庫是我們編程的原則. 比如,我們的test.jsp 和test1.jsp都需要得到一個參數(shù)userdir,這個userdir是從數(shù)據(jù)庫中得知,使用session將大大優(yōu)化性能,程序如下: 設(shè)計一個javabean 存儲userdir. public class UserEnv { private String userdir = ""; private String userurl = ""; public UserEnv(){ //構(gòu)建方法初始化userdir,可以從數(shù)據(jù)庫中讀取,這里簡單給值ppp userdir="pppp"; System.out.println("init userdir, one time"); } public String getUserdir() throws Exception{ return userdir; } } test1.jsp程序: <%@ page contentType="text/html;charset=ISO8859_1" %> <jsp:useBean id="myenv" scope="session" class="mysite.UserEnv"/> <html> <head> <title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> this is test1.jsp:<%=myenv.getUserdir()%> </body> </html> test2.jsp程序: <%@ page contentType="text/html;charset=ISO8859_1" %> <jsp:useBean id="myenv" scope="session" class="mysite.UserEnv"/> <html> <head> <title>Untitled</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> this is test2.jsp:<%=myenv.getUserdir()%> </body> </html> 無論用戶先調(diào)用test1.jsp還是test2.jsp, java bean UserEnv總是先初始化一次, 由于這個bean存在周期是seesion,因此該用戶第二次以后只要在seesion有效期內(nèi)再調(diào)用,myenv.getUserdir()將直接從bean內(nèi)存中讀取變量,不必再初始化.這樣提高速度,又減少數(shù)據(jù)庫訪問量. 這樣,我們就有了一個jsp程序之間共享變量或方法 的實現(xiàn)辦法. |
|
|