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