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 {
} }

最新文章

  1. 使用scanner工具类来获取用户输入的信息
  2. Linux教程:SSH免密码登录的方法
  3. how-to-redirect-cin-and-cout-to-files
  4. linux下notify机制(仅用于内核模块之间的通信)
  5. 单个未知大小图片在div里面垂直居中的方法。。。添加辅助元素挤一下位置达到居中
  6. puppetSvn集成
  7. Centos6.8下安装oracle_11gr2版主要过程
  8. 设置vs环境
  9. c/c++ 继承与多态 继承时如何改变个别成员的访问属性
  10. D5 LCA 最近公共祖先
  11. Html5计算MD5值
  12. [Object Tracking] MeanShift
  13. 给下拉列表添加options
  14. windows下,怎么轻易拷贝一个文件的完整路径?
  15. MVVM Light 新手入门(3) :ViewModel / Model 中定义“事件” ,并在View中调用 (无参数调用)
  16. Sony深度学习框架 - Neural Network Console - 教程(1)- 原来深度学习可以如此简单
  17. windows 下升级安装mysql8,与旧版本5.6共存
  18. Activiti工作流的应用示例 (官方guide项目方式)
  19. “全栈2019”Java多线程第五章:线程睡眠sleep()方法详解
  20. JS正则表达式从入门到入土(3)—— 范围类

热门文章

  1. 在IIS服务器上本地部署 ArcGIS API for js 4.15
  2. [NOI 2020 Online] 入门组T1 文具采购(洛谷 P6188)题解
  3. Maven安装本地jar包到本地仓库
  4. LDheatmap | SNP连锁不平衡图(LD)可视化,自己数据实现版!
  5. Mysql常用sql语句(八)- where 条件查询
  6. 【matlab 基础篇 02】基础知识一键扫盲,看完即可无障碍编程(超详细+图文并茂)
  7. python语法学习第十一天--迭代器
  8. vuecli3.x与vuecli2.x 主要区别
  9. sublime text 3 关联鼠标右击
  10. Java 代码精简