我的问题题是:客户端请求servlet,servlet正处理数据(一个类负责处理),这时客户再次请求servlet,serrvlet也会处理数据,怎么让servlet中止第一次请求呢?只会响应该最后一次请求的结果?
[b]问题补充:[/b]
主要是想中断前面的处理或关闭流,(指同一用户不同时间的请求)
servlet 是多线程的
所以达不到你的要求
但是可以避免并发产生的危险。。。。
1.servlet 里不定义 变量 比如int i = 0;
2.servlet 里写同步代码块 synchronized
这2种方法可以帮助你躲避并发的危险。。。。
如果是重复提交问题,可以产生一个session 装随机数 来判断。。。。。接受以后销毁 再次提交之后 数值就不同了 所以提交无响应。。。。
也可以提交到一个servlet 后 转发到一个jsp 页面 然后 弹出对话框提示 最后跳转到指定页面 这样业可以避免重复提交。。
如果struts 可以写令牌。。。
理论上不可能的...servlet是多线程的...你发出一个请求后..服务器端实例化了个对象...
当你发出第二个请求的时候..你和第一个请求一点关系都没有了....
..
一般只想执行一次的程序..实在不行..
你就把要运行的方法快写成static的
synchronized static 方法..只有一个人能执行...
不是很明白,你那边已经在处理逻辑了,怎么让他停下来?
那你要check你的程序,比如有新的请求进来,让上一个请求短路了去,退出逻辑,只对有效请求进行有效处理。
我短路的意思是,比如现在在处理a,这个时候有b进来了,那么你让a进入一个块,这个块是退出逻辑的..
不知道说没说清楚,希望你能理解
你想防止重复提交?
同意楼上的.
我猜楼主也是想防止重复提交.
如果是这样的话,最好在页面上作,因为servlet是多线程的.
还是请楼主把需求说的清楚一点吧.
我听说struts2有个子令牌能防止重复提交但是没用过..楼主可以看看去
用 synchronized 可以实现
servlet是线程安全的,如果非要像楼主说的那样,我想还是去解析一下HTTPServlet原代码吧.
struts本来就封装好了,处理的类中有个叫tokenize的东东,好好研究研究吧
哇嘎嘎嘎嘎嘎
[quote]servlet是线程安全的,如果非要像楼主说的那样,我想还是去解析一下HTTPServlet原代码吧.[/quote]
servlet默认非线程安全,如果需要线程安全需要指明。
楼主你说我是不是最后一次回复你呢,你猜猜看,你个××
有线程控制的。没法停止。真要关的话去改httpservlet吧!
需要长时间处理的功能,就不该放在servlet里,应该另外写一个业务类,由servlet调用。
这样的扩展性就很强了,你可以想定时就定时,想定量就定量,想干就干,想卡就卡
[b][/b][b][/b] :o
没法停止的
也可以从其他地方来防止他提交咯....