0 0

使用纯的JDBC+SERVLET的数据库事务的问题10

http://topic.csdn.net/u/20080705/18/d894b5e5-8b7b-4560-af16-e4b9d8405681.html
这是我在CSDN的发贴的地址

现在的问题,

如何像SSH整合开发一样,事务把struts的action包围 了,action中调用某一SERVICE层出错,整个ACTION中的代码进行回滚,那是有SSH的情况,使用了SPRING的AOP

如果使用纯的JDBC呢、、如何将事务把SERVLET包围 起来,,
知道这里高手多,感谢大家!


CSDN贴中有的高手说使用FILTER来进行开发,有没有相关的例程,我并不太了解如何用FILTER开发,感谢
OO 
2008年7月10日 23:34

5个答案 按时间排序 按投票排序

0 0

采纳的答案

事务: 说白了就是在一个connection里面做了一堆的事情, 在特定的时间点 [完成,异常] 进行提交或回滚.

所以, 无论是否Spring的TransactionManager还是自己的Servlet上的事务控制, 都是基于在一个事务单元内的一个connection上的, 所以, 你要将connection绑定在一个ThreadLocal上, 让里面所有的jdbc操作使用这个connection就好, 在Servlet的所有jdbc操作完成后, 再进行显示的commit 或 rollback.


下面的代码随手写的, 只是用于说明问题.

SessionConnectionUtil {

static ThreadLocal holder = new ThreadLocal();

public static getConnection() {
    if (holder.get() == null) {
        holder.sut(new Connection());
    }
   return (Connection) holder.get();
}

public static closeConnection() {
   holder.set(null);
}

}


CustomServlet extends HttpServlet {
   CustomDao dao;
   service() {
        try {
            dao.doSomething();

	    SessionConnectionUtil.getConnection().commit();
	} catch (Exception e) {
            SessionConnectionUtil.getConnection().rollback();
	} finally {
	    SessionConnectionUtil.closeConnection();
	}
   }
}

CustomDao {
   doSomething() {
       Connection connection = SessionConnectionUtil.getConnection();
       ...
   }
}

2008年7月11日 00:13
0 0

广州时间20:33

2008年7月11日 20:33
0 0

上海时间: 1:18 

2008年7月11日 01:19
0 0

忘了在Filter里加上rollBack()的代码了。

try{
chain.doFilter(request, response);  
}catch(Throwable t){
 DBManager.getConnection().rollback();
 DBManager.getConnection().close();
 return ;
} 
DBManager.commit();


异常捕捉的代码就偷懒了。你自己改造一下。思路和loggege一样类似。

2008年7月11日 00:38
0 0

使用ThreadLocal和Filter。
改造一下你原有的获得JDBC连接的类。然后在

public class CommitFilter implements Filter {

	public void destroy() {
		// TODO Auto-generated method stub

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		chain.doFilter(request, response);
		DBManager.commit();
	}

	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

public class DBManager{
	private static final ThreadLocal connection = new ThreadLocal(){

		@Override
		protected Object initialValue() {
			return _getConnection();
		}
    	
    };
    
	private static Connection _getConnection(){//这个方法可以是你旧有的以静态方式获得JDBC连接的方法的改名。
		Connection conn=null;
		//此处添加你获取JDBC的连接的代码。
		conn.setAutoCommit(false);
		return conn;
	}
	
	public static Connection getConnection(){
		return (Connection)connection.get();
	}
	
	public static void commit(){
		if(getConnection().isClose())thrown new RuntimeException();//这里不检测Connection是否是Null,并且在连接被关闭后抛出异常,是为了避免你的程序中非法对connection操作(比如提前关闭了连接,或者是调用了这个方法两次)
		getConnection().commit();//放心此处得到的是同一Connection
		getConnection().close();
	}
	
}


public class YourServlet ....{//你的Servlet

	...
	public void doPost(.....){
		DBManager.getConnection();
		....//doSomething.
		//去掉原有的关闭连接的代码。
	}
	...
}



最后配置Filter管理你的所有使用到数据库的Servlet。这个就不用我说了吧?呵呵

2008年7月11日 00:27

相关推荐

    JDBC+Servlet+jsp实现增删改查

    【JDBC+Servlet+jsp实现增删改查】是一个经典的Web开发应用场景,主要涉及Java后端的数据库操作、服务器端处理以及前端展示技术。在这个项目中,开发者通常会利用Java的JDBC(Java Database Connectivity)接口来...

    Java EE WEB 工程师培训------JDBC+Servlet+JSP整合开发

    3. JDBC连接池的使用,如C3P0、HikariCP等,以提高数据库连接的管理和效率。 4. MVC框架,如Spring MVC,它可以简化Java EE应用的开发,提供依赖注入和AOP(面向切面编程)等功能。 5. 熟悉一种或多种持久化框架,如...

    jdbc+servlet+jsp+mysql

    【jdbc】:JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。它是一个Java API,允许Java应用程序通过一组标准接口与各种...

    Servlet+JDBC+JSP项目实战源代码

    6. **开发流程**:项目实战通常会涵盖从创建数据库表,编写Servlet进行业务处理,使用JDBC进行数据库交互,到设计JSP页面展现数据的全过程。开发者会了解到如何设置MVC(Model-View-Controller)架构,使得代码结构...

    jsp+jdbc+servlet登陆完整程序和注解

    结合以上知识点,这个压缩包可能包含了一个使用JSP创建的登录界面,Servlet负责处理登录逻辑,JDBC用于与数据库交互,进行用户验证。同时,代码中可能使用了大量的注解来简化配置和提高可读性。为了更好地理解和使用...

    基于jdbc+servlet+filter的网上投票系统.zip

    事务管理也是JDBC的重要部分,确保数据操作的原子性、一致性、隔离性和持久性。 【Servlet】Servlet是Java Servlet API提供的标准,用于扩展服务器的功能。在这个投票系统中,Servlet扮演了处理HTTP请求和响应的...

    基于JSP+JDBC+Servlet的一个简单的客户管理系统.zip

    JDBC是Java语言连接数据库的标准接口,它提供了一组API来执行SQL语句、管理事务、处理结果集等。在这个客户管理系统中,JDBC起到了桥梁的作用,连接Web应用和后台数据库,使得系统能够读取、存储和更新客户数据。...

    JavaEE+JDBC+Servlet+EL表达式的员工信息管理系统.zip

    总结起来,"JavaEE+JDBC+Servlet+EL表达式的员工信息管理系统"是一个利用Java企业版技术栈开发的应用,它结合了Servlet来处理用户请求,JDBC来操作数据库,以及EL简化视图层的数据展示,共同构建了一个高效、可靠的...

    数据库课程作业,基于jsp + jdbc + servlet + javabean的学生管理系统.zip

    这是一个基于Web技术实现的学生管理系统,主要使用了Java服务器页面(JSP)、Java数据库连接(JDBC)、Servlet和JavaBean这四种核心技术。以下是这些技术的详细解释及其在学生管理系统中的应用。 1. JSP(Java...

    基于jdbc+jsp+servlet+java 超市订单管理系统.zip

    综上所述,基于jdbc+jsp+servlet+java的超市订单管理系统是一个综合性的实践平台,涵盖了数据库操作、动态网页生成、服务器端处理、以及Java语言应用等多个方面。通过学习和实践这个项目,开发者可以提升自己的全栈...

    jdbc+jsp+servlet视频截图

    JDBC的核心概念包括连接池、事务管理和预编译等,这些都能提高数据库操作的效率和安全性。 【servlet】:Servlet是Java中用于扩展服务器功能的接口,主要应用于Web开发。Servlet运行在服务器端,接收HTTP请求,处理...

    基于javaweb(JDBC+Servlet+jsp)技术实现的管理系统.zip

    这个"基于javaweb(JDBC+Servlet+jsp)技术实现的管理系统.zip"项目,显然就是一个使用这些核心技术构建的企业级管理系统的源代码包。 首先,我们来详细了解下JavaWeb中的关键技术: 1. **Java Servlet**:Servlet...

    基于 MySQL+Tomcat+Servlet+JSP 的简单作业管理系统源码+数据库+项目说明.zip

    - 实现数据库操作的事务管理 - 添加 AOP 依赖 - 使用 AOP 为所有访问添加日志打印 ### Ver 3.0 - 使用 Spring IoC 管理对象 - 添加 database-mvc module,派生自 database module - web-mvc-context.xml 中添加 ...

    超市账单管理系统(jsp+servlet)

    【超市账单管理系统(jsp+servlet)】是一个基于Web的软件应用,主要用于处理超市的账单管理任务。...对于开发者而言,了解JSP和Servlet的交互机制、Oracle数据库的使用以及Web应用的部署流程,都是掌握此系统的关键。

    JSP+servlet+JDBC+MYSQL+JSP(内附课程设计报告).zip

    这个压缩包可能包含了一个完整的课程设计项目,涵盖了Java服务器页面(JSP)、Servlet、Java数据库连接(JDBC)以及MySQL数据库的使用,还有相关的课程设计报告,用于阐述项目的设计思路和实现过程。 **1. JSP...

    jsp+servlet+jdbc开发的java web学生成绩管理系统

    该系统采用经典的Java Web技术栈,包括JSP(JavaServer Pages)、Servlet和JDBC(Java Database Connectivity),结合MySQL数据库,实现了高效、稳定的数据存储和访问功能。 首先,JSP是Java的一种动态网页技术,它...

    JSP+Servlet+mysql实现商品客户管理系统

    5. 连接数据库:使用JDBC(Java Database Connectivity)连接MySQL,执行SQL语句。 6. 测试与优化:对系统进行单元测试、集成测试,确保功能的正确性和性能的优化。 在实际开发中,可能还会涉及其他技术,如MVC...

    jsp+servlet实现通讯录

    这涉及到SQL查询、JDBC(Java Database Connectivity)API的使用,以及事务管理。 7. **JavaBean规范**:JavaBean是符合特定规范的Java类,通常作为数据容器。在本项目中,可以创建一个`Contact`类来表示联系人信息...

Global site tag (gtag.js) - Google Analytics