一、javax.servlet.http.HttpSession是一个抽象接口

它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是用户身份的唯一表示。注意,是容器(Tomcat,Resin)自动创建的。

用途:存放这个用户的一些经常被用到的信息,例如:用户名,权限。例如在购物车程序里,存放用户买的商品。

销毁:一定时间(跟容器有关)内,用户无任何动作,session自动销毁。

得到的方法: 
HttpSession session = request.getSession(); 
常用方法setAttribute 
session.setAttribute(key,value); 
这样在另一个jsp或者Servlet里,可以用 
session.getAttribute(key);得到value 
类似一个Map

二、org.hibernate.Session

它是hibernate操作数据库的一个句柄对象。它跟上面那个Session唯一的相似处就是名字有点像,其他没任何一样的地方。亦可以理解为数据库层和持久化层的互访载体,也可以认为是一个缓冲器,对数据库的所有CURD操作在这个session(缓存)中都有记录,一旦做个缓存commit操作,则所有对持久化对象的操作都将映射到具体的某个数据库中,完成最后的数据更新

Session对象:使用hibernate进行数据库操作,主要使用session。Session可以理解为对Connection对象的一个包装。Session对象中提供了对数据库的crud操作。Session是一个线程不安全的对象,生命周期非常短暂,一般和事务一一对应。Session又称为hibernate中的一级缓存。使用完马上关闭就是为了防止线程不安全问题。

一般的Hibernate程序中,Session由用户手动获取,手动关闭。 
正规项目中,在业务层获取Session

//1.新建Configuration对象

//读取src下hibernate.perproties,不推荐使用

  //Configuration cfg1 = new Configuration();

  //cfg1.addResource();

  //cfg1.addProperties();

//默认读取src下hibernate.cfg.xml

Configuration cfg = new Configuration().configure();

//如果hibernate的核心配置文件不叫hibernate.cfg.xml

//Configuration cfg2 = new Configuration().configure("hb.cfg.xml");

SessionFactory对象

是一个Session工厂。是一个重量级对象,是一个线程安全的对象,属于进程级别对象。

//2.通过Configuration创建SessionFactory对象

//在hibernate3.x中是这样写

//SessionFactory sf = cfg.buildSessionFactory();

//hibernate4.3

ServiceRegistry sr = new StandardServiceRegistryBuilder()

                                 .applySettings(cfg.getProperties())

                                 .build();

SessionFactory sf = cfg.buildSessionFactory(sr);

Session session = sf.openSession();

然后把此session传给dao层,将数据持久化或其他的操作。 
一次业务逻辑可能调用多个dao方法,例如银行转帐,是一个先减后增的过程,所以会调用2个dao里的方法(甲帐户减,乙帐户增)。因此,可以利用业务层产生的同一个Session来做这件事

a1和a2代表帐户实体。 
a1是甲的,a2是乙的。 
a1.setAcount(a1.getAcount()-1000); 
a2.setAcount(a2.getAcount()+1000); 
dao.update(a1,session); 
dao.update(a2,session); 
Transaction tx = session.beginTransaction(); 
tx.commit();

最后在业务层,将session关闭 
session.close(); 
或者调用HibernateSessionFactory.closeSession(session);

最好能加上异常捕捉,之类,如产生异常,即时回滚。保证操作不出意外。

try{ 
... 
tx.commit(); 
}catch(Exception e){ 
tx.rollback(); 
}finally{ 
HibernateSessionFactory.closeSession(session); 
}

默认session的时间为20分钟,如果想在这之前清除的话可以使用Session.Abandorn方法

连接:http://blog.csdn.net/aimbetter/article/details/36667797

servlet的HttpSession与HibernateSession的区别的更多相关文章

  1. Servlet中转发和重定向的区别

    Servlet中页面的跳转有两种方式:转发和重定向. 1.转发和重定向的区别 ①转发是服务器行为,重定向是客户端行为. ②转发是浏览器发生了一次请求,重定向至少是两次请求. ③转发地址栏中的url不会 ...

  2. 面试之jsp、Servlet相关知识——生命周期, 区别等

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  3. 【Servlet】doGet()与doPost()的区别

    doGet与doPost的区别 .Servlet接口只定义了一个服务方法--service .当发出客户端请求时,调用service方法并传递一个请求和响应对象 .使用时经常在doPost()中调用d ...

  4. Servlet & JSP - 转发与重定向的区别

    本文转载自:http://blog.csdn.net/kobejayandy/article/details/13762043 转发 转发的原理,可以通过下图展示: 浏览器的请求发送给组件 1,组件 ...

  5. Servlet & JSP - HttpSession

    关于 Session 的内容,参考 HTTP - Session 机制 创建和检索 HttpSession 通过 HttpServletRequest.getSession 方法可以获取 HttpSe ...

  6. Activity和Servlet的相似之处和区别

    相似之处:1.Activity.Servlet的职责都是向用户呈现界面.2.开发者开发Activity.Servlet都继承系统的基类.3.Activity.Servlet开发出来之后都需要进行配置. ...

  7. Servlet中forward和redirect的区别(转)

    forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response);     red ...

  8. servlet(5) HttpSession

    Servlet 提供的 HttpSession 接口,提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式. Servlet 容器使用这个接口来创建一个 HTTP 客户端和 HTTP ...

  9. Servlet和JSP的本质和区别

    基本概念 Servlet Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面.它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTT ...

随机推荐

  1. The following packages will be SUPERCEDED by a higher-priority channel是什么意思?

    参考资料: https://stackoverflow.com/questions/42015732/the-following-packages-will-be-superceded-by-a-hi ...

  2. #Linux 下 Xampp的安装与Hello World

    一.下载安装 去官网下载 移动下载完毕的xampp-linux-x64-7.4.6-0-installer.run 到/usr/local/jayce-softwares/xampp目录下(jayce ...

  3. MySQL的使用方法和视图、索引、以及存储过程的一些简单方法

    一,基本概念 1, 常用的两种引擎:         (1) InnoDB        a,支持ACID,简单地说就是支持事务完整性.一致性:         b,支持行锁,以及类似ORACLE的一 ...

  4. Spring事务方法上增加synchronized真的有效果吗?

    此文转载,Spring事务本身是一个非常复制的问题,再加上线程并发处理就更加要主要了,由于再开发中有很多朋友会范与下文同样的错误,因分享给大家. 前言 Spring事务的一个奇怪的问题. 朋友问了我一 ...

  5. 微信小程序 自定义省市选择器

    1.把省市数据放在city.js中,city.js放在until目录下 // city.js module.exports = { "province": [ { "ti ...

  6. Springboot在包含有参构造方法的类中使用@Value注解取值

    我们在Springboot中经常使用@Value注解来获取配置文件中的值,像下面这样 @Component class A { @Value("${user.value}") pr ...

  7. Python实用笔记 (7)高级特性——切片

    列表L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素 >>> L[0:3] ['Michael', 'Sarah', ' ...

  8. egret.sys.TextNode

    class Test extends egret.Shape{ protected textNode:egret.sys.TextNode; constructor(){ this.width = t ...

  9. 如何获取自定义meta标签信息?

    <meta name="apple-itunes-app" content="app-id=432274380" /> 类似于这种meta信息,js ...

  10. JS判断 函数是否定义/变量是否定义

    函数是否定义: <script type="text/javascript"> try { if(typeof FunName === "function&q ...