open Session In View和过滤器配置



Open Session In View模式的主要思想是:当Web Request(浏览器请求)开始时,自动打开Session,当Web Request结束时,自动关闭Session。也就是说,Session的生命周期与页面请求保持同步。



实现步骤:(分层架构)(web工程)

  1.entity层(实体层)

  2.dao层(数据访问层)

  3.util层(工具层)

  4.biz层(业务逻辑层)

  5.filter层(过滤器)

  6.进行过滤器在网站xml的配置

结构图如下:



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()底层实现原理
        //ThreadLocal变量
        public static final ThreadLocal<Session> threadTL=new ThreadLocal<Session>();

       //我想直接调用一个方法,获取Session
       //定义一个sessionFactory对象
        private static SessionFactory factory;
        private static Configuration cfg;
        static{
            cfg=new Configuration().configure();
            factory=cfg.buildSessionFactory();
        }
        //提供一个静态方法
        public static Session currentSession(){
            Session session=threadTL.get();
            if(session==null){  //当前线程中没有session对象
                session=factory.openSession();
                threadTL.set(session);
            }
            return session;

        }
        //关闭session
        public static void closeSession(){
            //获取线程中的session
            Session session = threadTL.get();
            if (session!=null) {
                threadTL.set(null);
                session.close();
            }
        }

    }


4.biz层(业务逻辑层)





5.filter层(过滤器)


@Override
    public 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();
            // 执行请求处理链
            chain.doFilter(request, response);
            // 返回响应时,提交事务
            tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
        } finally {
            // 关闭session
            HibernateUtils.closeSession();
        }

    }

6.进行过滤器在网站xml的配置



web.xml进行配置:



index.jsp界面:



实现效果:



注意:(常见问题)

解决方案:

查看一下biz层是否开启事务以下界面:

如果是将其事务开启与提交进行注释。在这不用重复进行事务操作。



open Session In View和过滤器配置

时间: 2024-09-27 01:53:51

open Session In View和过滤器配置的相关文章

J2EE监听器和过滤器基础

Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文. 监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会话的HttpSession监听和基于请求的ServletRequest监听. ServletContex监听器 ServletContex又叫application,存在范围是整个Servlet容器生命周期,当系统启动时就会创建,系统关闭时会销毁,该对象通常存放一些非常通用的数据,但是不推荐存放太多

vue.js基础知识篇(1):简介、数据绑定、指令、计算属性、表单控件绑定和过滤器

目录第一章:vue.js是什么? 代码链接: http://pan.baidu.com/s/1qXCfzRI 密码: 5j79 第一章:vue.js是什么? 1.vue.js是MVVM框架 MVVM的代表框架是Angular.js,以及vue.js. MVVM的view和model是分离的,View的变化会自动更新到ViewModel上,ViewModel的变化会自动同步到View上显示.这种自动同步依赖于ViewModel的属性实现了Observer. 2.它与angular.js的区别 相同

django 自定义标签和过滤器

django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个python源文件夹,(即文件夹里面要包含一个__init__.py.)文件夹名为templatetags.  此文件夹便是存放自定义标签和过滤器的源码的地方了. 再如果是在templatetags文件夹中定义了标签,如 test_tags.py,要如何使用我们自定义的test_tags.py呢.很简单,

.Net Core中间件和过滤器实现错误日志记录

1.中间件的概念 ASP.NET Core的处理流程是一个管道,中间件是组装到应用程序管道中用来处理请求和响应的组件. 每个中间件可以: 选择是否将请求传递给管道中的下一个组件. 可以在调用管道中的下一个组件之前和之后执行业务逻辑. 中间件是一个请求委托( public delegate Task RequestDelegate(HttpContext context) )的实例,所以中间件的本质就是一个方法,方法的参数是HttpContext,返回Task.传入的HttpContext参数包含

django中自定义标签和过滤器

想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1  在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个templatetags的包,并在该包下创建了一个名为mytags的文件.那么目录结构看起来应该就像这样: polls/ __init__.py models.py templatetags/ __init__.py mytags.py views.py 2  settings文件中的INSTALLD_A

云计算设计模式(十五)——管道和过滤器模式

云计算设计模式(十五)——管道和过滤器模式 分解,执行复杂处理成一系列可重复使用分立元件的一个任务.这种模式可以允许执行的处理进行部署和独立缩放任务元素提高性能,可扩展性和可重用性. 背景和问题 一个应用程序可能需要执行各种关于它处理的信息不同复杂的任务.一个简单,但不灵活的方式来实施这个应用程序可以执行此处理为单一模块.然而,这种方法有可能减少用于重构代码,对其进行优化,或者重新使用它,如果是在应用程序中其他地方所需要的相同的处理的部件的机会. 图1通过使用单片式的方式示出了与处理数据的问题.

SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

一 简介 (1)过滤器: 依赖于servlet容器.在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次.使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码:在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字.危险字符等 关于过滤器的一些用法可以参考我写过的这些文章: 继承HttpServletRequestWrapper以实现在Filter中修改HttpServletReque

open Session In View模式

首先看图说话: ****Open Session In View模式的主要思想是:在用户的每一次请求过程始终保持一个Session对象打开着*** 接下来就是代码: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 配置图: +++++++++++++++++++++

Spring Open Session In View

提出:session在应用层就关闭,所以持久化要在应用层,但是到了view层持久化则session已经关闭 解决:session延迟到view层再关闭 原理:session(整个requestScope)FlushMode-->FlushMode.NEVER,(read only 则自动-->FlushMode.AUTO,前提:拥有transaction). 手动解决方案: session.setFlushMode(FlushMode.AUTO); session.save(user); se