ThreadLocal容器
给线程绑定一个OBJECT,只要在同一个线程下,随时可以从线程中拿东西
匿名内部类里面的变量必须是FINAL (意味着不可以改变线程==)或者全局的,
这样整个应用都可以共享这个线程容器,放在线程容器里的又可以在同一线程下共享
在这里主线程是MAIN函数的线程
主线程main进行 new Thread又来了个子线程 所以线程 改变了 肯定结果为空
总结:只要线程不变 信息是可以互相取的
filter和servlet是同一线程
在Web.xml中配置filter
/* 代表拦截全部servlet
Service中执行的东西和filter中执行的是同一个线程的
把sqlseesion放到ThreadLocal中 就可以被对方获得
工具类
在service层中
三行代码获取session
中间是业务逻辑
两行代码提交关闭session
重复的代码冗余 我们把获得和关闭都封装成工具类方便调用
解析文件希望类刚加载进来就存在了 所以获得session要在主函数执行之前就存在 在静态代码块里执行
获取的时候不能获取一次就opensession一次 所以要判断如果已经有了就别取
不是空就关了 然后还要把线程容器清空
- 现在service层可以调用工具类就直接获得Session关闭Session但是每一个service还是要重复的调用这两个函数
- 有没有什么类能够帮助在Serive前后调用这两个函数让Service也不用重复写这两个工具类函数呢?
- Filter监听类:servlet调用service,filter恰好可以在Servlet前后都执行 这样就能包裹住service在他的前后取调用工具类 然后dofilter Serivice还可以进行自己
包这
现在service就减少了许多代码了
获得Seesion工具类获得
进行Sql操作 不用管提交 关闭 事务回滚 Filter 就做了 简洁明了还没有冗余