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 ();