open Session In View和过滤器配置
Open Session In View模式的主要思想是:當(dāng)Web Request(瀏覽器請求)開始時,自動打開Session,當(dāng)Web Request結(jié)束時,自動關(guān)閉Session。也就是說,Session的生命周期與頁面請求保持同步。
?實現(xiàn)步驟:(分層架構(gòu))(web工程)
1.entity層(實體層)
2.dao層(數(shù)據(jù)訪問層)
3.util層(工具層)
4.biz層(業(yè)務(wù)邏輯層)
5.filter層(過濾器)
6.進行過濾器在網(wǎng)站xml的配置
結(jié)構(gòu)圖如下:
?
?1.entity層
? 《1》.進行封裝字段,小配置書寫。
?實體類:
?
?Emp.hbm.xml:?
2. dao層:
?
?3.util層(工具層)
?
package cn.hq.util;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration;public class HibernateUtils {//getCurrentSession()底層實現(xiàn)原理//ThreadLocal變量public static final ThreadLocal<Session> threadTL=new ThreadLocal<Session>();//我想直接調(diào)用一個方法,獲取Session//定義一個sessionFactory對象private static SessionFactory factory;private static Configuration cfg;static{cfg=new Configuration().configure();factory=cfg.buildSessionFactory();}//提供一個靜態(tài)方法public static Session currentSession(){Session session=threadTL.get();if(session==null){ //當(dāng)前線程中沒有session對象session=factory.openSession();threadTL.set(session);}return session;}//關(guān)閉sessionpublic static void closeSession(){//獲取線程中的sessionSession session = threadTL.get();if (session!=null) {threadTL.set(null);session.close();}}}4.biz層(業(yè)務(wù)邏輯層)
??
?5.filter層(過濾器)
?
@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {Session session = null;Transaction tx = null;try {session = HibernateUtils.currentSession();System.out.println("filter\t"+session.hashCode());tx = session.beginTransaction();// 執(zhí)行請求處理鏈 chain.doFilter(request, response);// 返回響應(yīng)時,提交事務(wù) tx.commit();} catch (HibernateException e) {e.printStackTrace();tx.rollback();} finally {// 關(guān)閉session HibernateUtils.closeSession();}}6.進行過濾器在網(wǎng)站xml的配置
web.xml進行配置:
index.jsp界面:
實現(xiàn)效果:
注意:(常見問題)
?
解決方案:
查看一下biz層是否開啟事務(wù)以下界面:
如果是將其事務(wù)開啟與提交進行注釋。在這不用重復(fù)進行事務(wù)操作。
?
轉(zhuǎn)載于:https://www.cnblogs.com/hq-123/p/5839466.html
總結(jié)
以上是生活随笔為你收集整理的open Session In View和过滤器配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue条件渲染
- 下一篇: [转载]ArcMap中如何自制符号库(二