迅雷插件使得火狐浏览器带参数连接执行了两遍Action

本文详细记录了在使用SSH框架编写删除数据库数据的代码时,遇到火狐浏览器下出现数据越界异常的问题。通过增加try-catch语句解决了并发执行的bug,并分析了问题源头在于火狐浏览器的ThunderExtension附加组件导致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用ssh框架写一个删除数据库数据的代码,Action定义如下:

@Action(value="/admin/deleteExam", results={@Result(name=SUCCESS, type="redirectAction", location="examChooseCourse")})
    public String DeleteExam(){
        course=courseDAO.findById(course.getPid());
        exam=(Test)course.getTests().toArray()[0];
        sessionFactory.getCurrentSession().clear();
        testDAO.delete(exam);
        return SUCCESS;
    }

写好之后用Chrome浏览器测试的时候一切正常,但是用火狐浏览器却出现了一个数据越界的异常。
调试了一下发现,是exam获取的时候值是空的,但是这种情况是不应该存在的,因为之前有其他的语句控制,删除时exam一定是存在的。后来再用火狐调试发现这个Action居然有两个线程在跑!而在Chrome下是正常的,只有一个线程。
解决方案是增加了一个try-catch语句。

try{
        exam=(Test)course.getTests().toArray()[0];
        sessionFactory.getCurrentSession().clear();
        testDAO.delete(exam);
        }catch(Exception e){logger.info(e.getMessage());}

这样就不怕跑两次。但是感觉很不放心,以为是程序本身的问题。后来在论坛看到了论坛上也有类似问题,其中tang195的回答非常明确

找到问题了。是有一个火狐附加组件,Thunder Extension ,一看就是迅雷的破玩意。
我把附加组件全部禁用,就没问题了。然后一个一个开启,直到开启 Thunder Extension ,问题重现
然后把这个禁用,问题就没有了。看来问题就出在这个附加组件上。

试了一下以后发现的确实如此,迅雷插件真是个坑。看来为了防止类似情况在以后编码时不健壮的环节还是要着重处理一下的~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值