天天看點

jsp中的session

Jsp的session是使用bean的一個生存期限,一般為page,session意思是在這個使用者沒有離開網站之前一直有效,如果無法判斷使用者何時離開,一般依據系統設定,tomcat中設定為30分鐘.

我們使用session功能,可以達到多個jsp程式從操作同一個java bean,那麼這個java bean可以作為我們傳統意義上的"全局變量池".(在java中我們可以使用static化一個變量和方法,使用singleton唯一化對象.)

在項目實踐中,我們Jsp程式中很多參數需要從資料庫中讀取,有的參數實際讀取一次就可以,如果設計成每個使用者每産生一個頁面都要讀取資料庫,很顯然,資料庫的負載很大,同時也浪費時間,雖然可能有優化,但是盡量少使用資料庫是我們程式設計的原則.

JSP使用一個叫HttpSession的對象實作同樣的功能。HTTPSession 是一個建立在cookies 和URL-rewriting上的高品質的界面。Session的資訊儲存在端,Session的id儲存在客戶機的cookie中。事實上,在許多上,如果支援的話它們就使用cookies,但是如果不支援或廢除了的話就自動轉化為URL-rewriting,session自動為每個流程提供了友善地存儲資訊的方法。

Httpsession具有如下API:

getId 此方法傳回唯一的辨別,這些辨別為每個session而産生。當隻有一個單一的值與一個session聯合時,或當日志資訊與先前的sessions有關時,它被當作鍵名用。

GetCreationTime 傳回session被建立的時間。最小機關為千分之一秒。為得到一個對列印輸出很有用的值,可将此值傳給Date constructor 或者的方法setTimeInMillis.

GetLastAccessedTime 傳回session最後被客戶發送的時間。最小機關為千分之一秒。

GetMaxInactiveInterval 傳回總時間(秒),負值表示session永遠不會逾時。

getAttribute 取一個session相聯系的資訊。(在jsp1.0中為 getValue)

Integer item = (Integer) session.getAttribute("item") //檢索出session的值并轉化為整型

setAttribute 提供一個關鍵詞和一個值。會替換掉任何以前的值。(在jsp1.0中為putValue)

session.setAttribute("ItemValue", itemName); // ItemValue 必須不是must簡單類型

在應用中使用最多的是getAttribute和setAttribute.現以一個簡單的例子來說明session的應用,test1.jsp(資訊寫入session),test2.jsp(從session讀出資訊)。

test1.jsp

<HTML>

<HEAD>

<TITLE> Document </TITLE>

</HEAD>

<BODY BGCOLOR="#FFFFFF">

<%

session.setAttribute("str",new String(“this is test”));

%>

</BODY>

</HTML>

test2.jsp

<TITLE> New Document </TITLE>

String ls_str=null;

ls_str=(String)session.getAttribute("str");

out.println(“從session裡取出的值為:”+ls_str);

1,不是的,應該避免多個線程共享同一個Session執行個體

2,Session執行個體是輕量級的,所謂輕量級:是指他的建立和删除不需要消耗太多資源

3,Session對象内部有一個緩存,被稱為Hibernate第一緩存,他存放被目前工作單元中加載的對象,每個Session執行個體都有自己的緩存。

org.hibernate Interface Session

public interface Session extends Serializable : 是一個Java application 和Hibernate之間主要的運作時接口,這是執行持久化服務的中心API

主要方法:

public Transaction beginTransaction() throws HibernateException:傳回和目前Session對象互相聯系的Transaction對象(表示在資料庫中重新開始一個)

public Transaction getTransaction():傳回和目前session聯系的Transaction對象

public Connection connection close() throws HibernateExcepton:結束目前的Session對象

public void clear() :清空Session,清除所有儲存在目前Session緩存中的實體對象,終止所有正在執行的方法(eg: save(),update(),delete() .....)

public Serializable save(Object object)throws HibernateException 對目前參數指定的對象進行持久化(系統會首先賦予參數對象一個OID),他相當于insert語句 後面在詳細介紹

public Connection connection() throws HibernateException 得到目前Session 中包含的。

public boolean contains(Object object):判斷參數給出的對象()是否在目前Session的緩存中

public void evict(Object object) throws HibernateException :将參數給出的Object從目前Session對象類中删除,使這個對象從持久态變成遊離态,這種狀态的改變不會引起對資料庫的同步,後面詳細介紹

public Object load(Class theclass,Serializable id) throws HibernateException 傳回第一個參數指定類對應的表中,第二個參數指定的行(第二個參數就是要取得對象的OID,他對應表中主鍵列的值)

public void update(Object object) throws HibernateException :更新一個對象到資料庫中,後面在詳細介紹

public void delete (Object object)throws HibernateException:從資料庫中删除和參數指定的對象對應的記錄

public Object get(Class class,Serializable id) throws HibernateException:和load()方法一樣差別在于,如果資料庫表中沒有對應的記錄,get()方法傳回null,load()方法将報異常

Transanction接口是Hibernate的資料庫接口,用于管理事務,他對底層的事務作出了封裝,使用者可以使用Transanction對象定義自己的對資料庫的,底層事務包括:JDBC

API,JTA(Java Transaction API)。

一個Transaction對象的事務可能會包括多個對資料庫進行的操作

org.hibernate Interface Transaction

public interface Transaction

public void commit() throws HibernateException 重新整理目前的Session以及結束的工作,這個方法将迫使資料庫對目前的事務進行送出

public void rollback() throws HibernateException :強迫目前

public boolean isActive() throws HibernateException:這個是否存活

----------------------------------------------------------------------------------------

Session:當中包含一個Connection對象

Connection c =session.getConnection();

Session的緩存用于臨時儲存持久化的對象,等到一定時候,再将緩存中的對象儲存到資料庫中。

:如果一個Session中包含有多個Transaction(資料庫事務),這些Transaction的集合稱為應用程式事務

标準使用形式:

Configuration config=new Configuration().configure("hibernate.cfg.xml");

SessionFactory sessionfactory=config.buildSessionFactory();

Session session=sessionfactory.openSession();

Transaction tx=session.beginTransaction();

try

{

session.save();

tx.commit();

}

catch(Exception e)

if(tx!=null) tx.rollback();

finally

session.close ();

繼續閱讀