2013-01-21 18 views
1

以下index.html调用(below)servet的doPost以查看URL是否在拍卖中可用。一切都很好。但是,我正在寻找在页面重定向之后执行其他类的另外两种方法。我的问题是另外两个额外的方法需要很长时间才能完成,因此我们不能直接在response.sendRedirect之后放置它们,因为它们保留了初始响应。在doPost()中调用方法而不减慢结果页面

如何在发送重定向时立即发送重定向(如下图所示),然后调用其他两个需要在doPost中找到的相同String数据变量来操作的方法?

的index.html

<html> 
<head> 
<title>URL Auction Search Page</title> 
</head> 
<body> 
<CENTER> 
<FORM ACTION="/ResultServlet/Results" METHOD=GET> 
    <INPUT TYPE=TEXT NAME="st"> 
    <INPUT TYPE=SUBMIT VALUE=Submit> 
    </FORM> 
</CENTER> 
</body> 
</html> 

的Servlet

@WebServlet("/Results") 
public class Results extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
     public static String str=""; 

    private String businessLogic(String q){ 
     try { 
      str = new compute.URL.GetAvailURI("https://www.registerdomains.com/auctionAPI/Key:a05u3***1F2r6Z&urlSearch="+q); 
      /*more boring number crunching */ 
      return str; 
      } 
/* 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    } 
*/ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     Results r = new Results(); 
     String st = request.getParameter("st"); 
    String data = r.businessLogic(st); 
     response.sendRedirect("results/resultActionURL.html?st="+data); 
//IDEALLY I WOULD LIKE TO CALL outsideMethod1(data) and outsideMethodTWO(data) HERE 
    //BUT IT TAKES TOO LONG. HOW CAN I RUN THEM W/O SLOWING DOWN THE RESPONSE 
      //(LIKE A ProcessBuilder call to a shell for example where there's almost a handoff) 
    } 

} 
+0

客户是否需要outsideMethod1和outsideMethod2的结果,或者你只需​​要他们要执行doPost操作? –

+0

其他两种方法产生两个其他结果页面,但我可以在客户端获得初始结果页面时处理这些页面。他们不必成为doPost的一部分,但我需要在doPost()中创建的字符串数据() – Chris

+0

为什么不从客户端进行3个调用?最初的调用会返回数据并重定向到另一个页面。该页面将执行2次调用返回的数据来运行其他2个操作? –

回答

2

执行在一个单独的线程的那些方法。

public class Results extends HttpServlet{ 
... 
    private Thread t; 
    private volatile String myResult; 
... 
    protected void doPost(...){ 
    ... 
     t = new Thread(){ 
     public void run(){ 
      myResult = outsideMethod1(data); 
     } 
     } 
     t.start(); 
    } 
} 

然后在你想要得到的结果返回的方法:

t.join(); 
String result = myResult; 
... 

,类似的还有outsideMethodTWO

+0

这样做,谢谢。 – Chris

+1

如果您曾经有来自多个客户端的重叠呼叫,这将是一个不正确的方法。 –

+0

对不起。詹姆斯是对的。你应该保持一个同步的HashMap,它将客户端映射到结果。 – dspyz

相关问题