首先有个目标为 /* 的过滤器。public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);  //servlet--service--dao
DBManager.CommitTransaction();
}finally{
DBManager.closeConn();
}
}并且有个数据库的工具类。public class DBManager {

private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();

private static DataSource ds;
static {

ds =new ComboPooledDataSource();

}
public static DataSource getDataSource(){

return ds;
}
public static  Connection getConnection(){
try{
Connection conn =tl.get();
if(conn==null){
conn =ds.getConnection();
conn.setAutoCommit(false);
tl.set(conn);
}
return conn;
}catch (Exception e) {

e.printStackTrace();
throw new RuntimeException(e);
}
}

public static void StartTransaction(){
try {
Connection conn = getConnection();
conn.setAutoCommit(false);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void CommitTransaction(){
try {
Connection conn = getConnection();
if(conn!=null){
conn.commit();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void closeConn(){
Connection conn =null;

try {
conn =getConnection();
if(conn!=null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally{
tl.remove();

}
}
}当我从某个链接点入到某个servlet的dealorder方法的时候会出现两个线程并发执行(我是这么认为的),导致存入数据库的数据会出现重复数据,这是怎么回事?????private void dealorder(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {

try {
Cart cart = (Cart) request.getSession().getAttribute("cart");//购物车对象
//保存订单负责人和备注信息);
service.saveOrder(cart);//将购物车的对象中的数据保存在数据库中。
cart.removeAll();

} catch (Exception e) {
// TODO: handle exception
request.setAttribute("message", "订单生成失败");
}
request.setAttribute("message", "订单生成成功,请等待收货");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}