struts2同一时间同一客户端能否同时执行多个action呢?
本人认为是不行的,比如我上传一个很大的文件,在Action中执行了saveImg方法,估计要好几分钟才能传完,当此时我又执行其它action方法时,
之前的上传图片的action方法就失效了...这不是我想要的结果,我想,执行后一个action时,不影响前面的action执行,即,让上传图片的action方法转到后台去执行,后面执行的action不影响前面的,怎么办呢?
我知道应该要用多线程,怎么用呢?有做过类似的朋友,贴些关键代码上来参考下吧,我一直没弄对.以下是相关代码:public class TestAction extends ActionSupport
{
public String saveImg() throws Exception
{
           //执行图片保存,这里省略,多线程应该在这里做文章,怎么做呢?
           return SUCCESS;
        } public String other() throws Exception
{
           //这里要不要写相关多线程的处理呢?
           //执行其它action方法过程
           return SUCCESS;
        }}应该跟jsp代码没关系的,这里不贴出来了,就是提交到上面的两个action,类似<s:form action="testSaveImg.action">这样子的.
之前CS有做过简单的多线程程序,但运用不精,请教大虾们了!
注:这样做的好处很明显,大大提高效率,但不知有没什么安全隐患,也可说说这方面的吧

解决方案 »

  1.   

    请求---》响应是一对一的,不能同时出发两个action,可以循序执行,比如 dopost() 调用doget()方法。如果想实现上传的同时,触发后台动作,可以在saveImg里面添加线程,执行动作。 public String saveImg() throws Exception
     {
               //执行图片保存,这里省略,多线程应该在这里做文章,怎么做呢?
    。。
               //执行其他动作
               Thread t = new Thread();
               t.start();           return SUCCESS;
     }
      

  2.   

    struts支持多线程,这是肯定的,但这个多线程的意思是:
    struts采用多个线程并发的处理来自客户端(浏览器)的请求,它可不管这个请求来自于哪里。但我们首先要确定一个前提,就是一个Request-Response的基本过程,是不可再分的,不可能在这一次请求中再讨论多线程的问题,
    所以,当做大文件上传的时候,这一个请求过程持续的时间比较长,所以当前负责上传的这个请求就不能干别的了,否则一被中端,数据就停止传输了。但这并不意味着你的浏览器不能再向服务器发出请求,比如,你再开一个新的窗口去访问其它页面,肯定是可以的。
      

  3.   

    呵,跟2楼的好像有点冲突,一个Request-Response的基本过程,是不可再分的,不可能在这一次请求中再讨论多线程的问题,
    也就是说前面的Request-Response过程没完成任务时,后面在相同的客户端又来另一个Request-Response,那前面的就失效了.那是不是说像2楼一样在方法里
    加入多线程也无效呢?即另一个请求发生时,多线程也失效?也不会触发后台动作执行相关的任务?或者说后台动作也将失效?(注:还没试,先留这个疑问吧,后面再补充,我想应该是可以通过多线程执行后台的任务的)
    当然,再打开一个新的窗口,执行其它的action那是没问题的,只要窗口没关闭,action方法将执行完后返回给当前窗口,这点是共识.
      

  4.   

    你的浏览器关掉了,只是你的上传会停止,服务端的方法并不会立即停止,
    你把断点设置在action中,当程序进入到action断点,然后关掉页面,然后再运行。断点后面的代码其实还会运行。
      

  5.   

    也就是说前面的Request-Response过程没完成任务时,后面在相同的客户端又来另一个Request-Response,那前面的就失效了.那是不是说像2楼一样在方法里 相同的客户端,你怎么界定这个概念,
    如果说,相同的客户端 代表一个主机,那么当然可以同时进行多个请求,
    如果说相同的客户端指的是正在提交上一个请求的那个页面,那肯定是无法再次请求的,否则上次请求就要断掉了。
      

  6.   

    呵,表述得确实不是很好,我指的"相同客户端"就相当于在一个窗口里面吧(我使用的是框架),或者说相当于一个session吧,就是你说的后面那个如果.经过实验,基本上了解清楚了,6楼的正确,而你的也正确,改变action时,前面那个请求确实断了,但action中的方法还是要执行完.即六楼说的"服务端的方法并不会立即停止",
    但由于前面的请求已断,上传文件时表现在上传输入流中断,故给人的感觉之前的action执行失效了...这样就跟多线程没什么关系了.
    好了,基本上可以结了,可能理解有误,有疑议的欢迎提出,贴先不结了.
      

  7.   

    如果说在struts中在调用多线程,是否和struts多线程在服务器端收操作系统共同调用?