ASP Session的功能的缺陷
发布时间:2018-09-30
当时ASP的开发人员都正在运用Session这一强壮的功用,可是在他们运用的过程中却发现了ASP Session有以下缺点:
进程依赖性:ASP Session状况存于IIS的进程中,也即是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢掉。别的,重起或者封闭IIS效劳都会形成信息的丢掉。
Session状况运用范围的局限性:当一个用户从一个网站访问到别的一个网站时,这些Session信息并不会随之迁移曩昔。例如:新浪网站的WWW效劳器能够不止一个,一个用户登录之后要去各个频道阅读,可是每个频道都在不一样的效劳器上,假如想在这些WWW效劳器同享Session信息怎么办呢?
Cookie的依赖性:实际上客户端的Session信息是存储与Cookie中的,假如客户端彻底禁用掉了Cookie功用,他也就不能享用到了Session供给的功用了。
鉴于ASP Session的以上缺点,微软的设计者们在设计开发 ASP.NET Session时进行了相应的改进,彻底克服了以上缺点,使得ASP.NET Session成为了一个愈加强壮的功用。
HIbernate中的Session
Session是JAVA应用程序和Hibernate进行交互时运用的首要接口,它也是耐久化操作中间API,
留意这儿的Session的意义,它与传统意思上web层的HttpSession并没有关系,Hibernate Session之与Hibernate,相当于JDBC Connection相对与JDBC。
Session目标是有生命周期的,它以Transaction目标的业务开端和完毕鸿沟
Session作为贯穿Hibernate的耐久化办理器中间,供给了很多的耐久化的办法,如save(), update ,delete ,find(Hibernate 3中现已取消了此办法)等,经过这些办法咱们能够通明的完结目标的增删改查(CRUD-- create read update delete),这儿所谓的通明是指,Session在读取,创建和删去暗射的实体目标的实例时,这一系列的操作将被转换为对数据库表中数据的增加,修正,查询和删去操作。
Session有以下的特色
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 中包括的Connection目标。
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
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 ();
}