0

この方法で着信 HttpPost を管理する tomcat6 サーブレットがあります。

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        if (request.getParameter("cmd") != null) {
        eventPool.addEvent(new CommandEvent(new String[] { request.getParameter("cmd"),
                request.getParameter("json") }, response));
    }
}

リクエストが処理されます。これが完了したら、要求元のクライアントに次のように結果を書き込みます。

protected void sendResponse(HttpServletResponse httpResponse, String content){
    try {
        httpResponse.getWriter().println(CMD + "#" + content);
        httpResponse.getWriter().close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

しかし、フラッシュに失敗し、HttpResponse が既に閉じられているため、NullPointerException が発生します。

HttpResponse が必要になる前にフラッシュしないようにするにはどうすればよいですか?

4

1 に答える 1

0

このスタイルのプログラミングを使用するには、Tomcat 7 (または Servlet 3.0 以降をサポートするその他のコンテナー) を使用する必要があります。Servlet 3.0 仕様の非同期要求処理部分を見てください。

Servlet 3.0 より前では、要求/応答処理は同期的です。つまり、リクエスト/レスポンスのペアを「パーク」して、後で別のスレッドで処理することはできません。doPost() メソッドが終了するとすぐに、Tomcat はリクエスト オブジェクトとレスポンス オブジェクトをリサイクルして、それらを使用して新しいリクエストを処理できるようにします。

于 2012-08-14T21:33:25.920 に答える