JavaWeb八---书城第八阶段 过滤器拦截、ThreadLocal 第九阶段Ajax验证用户名可用



 



ConcurrentHashMap<>()线程安全的Map,高并发下使用

Hashtable<>()也是线程安全的集合  

 

一般Map方法

    
线程中,创建随机数,获取当前线程名,线程名和随机数保存到Map---线程名和随机数关联



main方法中调用3个线程Task

Task中创建OrderService---输出获取线程名和对应的管理数据



ThreadLocal


ThreadLocal<T>可以指定,关联的数据的类型


一个ThreadLocal只能关联一个线程关键数据


输出的是bbj

关联多个数据,需要用多个ThreadLocal






在订单过程的三层结构中,输出线程名

 

​​​​​以生成订单距离,事务问题




1.ThreadLocal 关联连接和线程,确保整个订单过程使用一个连接、

订单过程中,线程始终不变
:将JDBC的连接通过ThreadLocal 建立关联

1. 获取连接时,通过ThreadLocal获取,ThreadLocal没有关联,再去找Druid连接池------------保证一旦关联上线程,后面用到连接的地方,都使用同一个连接。

获取连接的同时  设置手动管理事务  setAutoCommit()
      

2. 将释放连接分别和提交、回滚绑定-----作为方法放入工具类JdncUtils中

2. 在JdbcUtils工具类中,创建  提交+释放连接   和   回滚+释放连接


3. 在  orderService.createOrder()  被调用处 try...catch 捕获异常



4. 每个修改数据库的Dao,都是调用BaseDao的update通用方法----------update方法也需要向上抛出异常
BaseDao中操作数据库的方法中,不能关闭连接,需要在提交和回滚时,才能关闭,而且要抛出异常---供service处捕获

 

 

 

异常捕获说明:




jdbc操作-----实际调用update----update需要抛异常


一系列jdbc操作出现异常
update异常-----向上抛出------saveOrder:return给OrderService.CreaterOrder() --------- 在调用处,需捕获异常


没有异常--------提交事务
有异常--------回滚事务


在创建连接时----JdbcUtils中getConnnection ---- 就设置手动管理实务

一系列Jdbc操作---OrderServiceImpl中--- 例如OrderService.createOrder()
     


一个一个添加try...catch太麻烦

 

二、



给  doFilter()  的 chain.diFilter()  配置try...catch,有异常就回滚事务,每异常就提交事务

       
配置try...catch过滤.---------/* 当前工程目录下的所有文件


注意:中途,如果异常被处理:(如在BaseServlet中类处理,就需要抛出异常),必须保证,修改数据库的操作中的异常,抛出到Filter过滤器中处理

 

 

 

error-page标签配置,服务器出错后,自动跳转的页面

错误友好页面



doFilter()处捕获的异常,做回滚处理后,继续向上抛给Tomact服务器

 



 


添加商品到购物车---原方法---给按钮添加点击事件 location.href 请求到CartServlet


使用Ajax 在最后,不用重定向,而使用json回传



 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值