1

次のindex.htmlは、(以下の)サーブのdoPostを呼び出して、オークションでURLが利用可能かどうかを確認します。すべてがうまくいきます。ただし、ページリダイレクト後に他のクラスから2つの追加メソッドを実行しようとしています。私の問題は、他の2つの追加のメソッドが完了するまでに長い時間がかかるため、最初の応答を保持するため、response.sendRedirectの直後に配置できないことです。

doPostにある同じ文字列データ変数を操作する必要がある他の2つのメソッドを呼び出しながら、リダイレクトをすぐに(正確に以下のように)送信するにはどうすればよいですか?

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>

サーブレット

@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)
    }

}
4

1 に答える 1

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についても

于 2013-01-21T22:03:33.140 に答える