(八)Filter&ThreadLocal实现处理事务
2024-09-05 21:53:15
ConnectionContext.java
package com.aff.bookstore.web; import java.sql.Connection; public class ConnectionContext {
private static ConnectionContext insetance = new ConnectionContext(); public static ConnectionContext getInsetance() {
return insetance;
} private ThreadLocal<Connection> connectionThreadLocal = new ThreadLocal<>(); public void bind(Connection connection) {
connectionThreadLocal.set(connection);
} public Connection get() {
return connectionThreadLocal.get();
} public void remove() {
connectionThreadLocal.remove();
}
}
TranactionFilter.java
package com.aff.bookstore.filter; import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.aff.bookstore.db.JDBCUtils;
import com.aff.bookstore.web.ConnectionContext; @WebFilter("/*")
public class TranactionFilter implements Filter { public TranactionFilter() {
} public void destroy() {
} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
Connection connection = null; try { // 1.获取连接
connection = JDBCUtils.getConnection(); // 2.开启事务
connection.setAutoCommit(false); // 3.利用ThreadLocal 把连接和当前线程绑定
ConnectionContext.getInsetance().bind(connection); // 4.把请求 转给,目标Servlet
chain.doFilter(request, response); // 5.提交事务
connection.commit(); } catch (Exception e) {
e.printStackTrace(); // 6.回滚事务
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
HttpServletResponse resp = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
resp.sendRedirect(req.getContextPath()+"/errror-1.jsp"); } finally {
// 7.解除连接
ConnectionContext.getInsetance().remove(); // 8.关闭连接
JDBCUtils.release(connection);
}
} public void init(FilterConfig fConfig) throws ServletException {
} }
最新文章
- 使用scanner工具类来获取用户输入的信息
- Linux教程:SSH免密码登录的方法
- how-to-redirect-cin-and-cout-to-files
- linux下notify机制(仅用于内核模块之间的通信)
- 单个未知大小图片在div里面垂直居中的方法。。。添加辅助元素挤一下位置达到居中
- puppetSvn集成
- Centos6.8下安装oracle_11gr2版主要过程
- 设置vs环境
- c/c++ 继承与多态 继承时如何改变个别成员的访问属性
- D5 LCA 最近公共祖先
- Html5计算MD5值
- [Object Tracking] MeanShift
- 给下拉列表添加options
- windows下,怎么轻易拷贝一个文件的完整路径?
- MVVM Light 新手入门(3) :ViewModel / Model 中定义“事件” ,并在View中调用 (无参数调用)
- Sony深度学习框架 - Neural Network Console - 教程(1)- 原来深度学习可以如此简单
- windows 下升级安装mysql8,与旧版本5.6共存
- Activiti工作流的应用示例 (官方guide项目方式)
- “全栈2019”Java多线程第五章:线程睡眠sleep()方法详解
- JS正则表达式从入门到入土(3)—— 范围类
热门文章
- 在IIS服务器上本地部署 ArcGIS API for js 4.15
- [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解
- Maven安装本地jar包到本地仓库
- LDheatmap | SNP连锁不平衡图(LD)可视化,自己数据实现版!
- Mysql常用sql语句(八)- where 条件查询
- 【matlab 基础篇 02】基础知识一键扫盲,看完即可无障碍编程(超详细+图文并茂)
- python语法学习第十一天--迭代器
- vuecli3.x与vuecli2.x 主要区别
- sublime text 3 关联鼠标右击
- Java 代码精简