0

JavaベースのWebサイトを作成するためにサーブレットを使用しています。計算データをサーバーに送信すると、このサーバーが計算を実行し、結果をデータベースに保存します。

読み込みページを表示したいので、1/フォーム送信2/読み込みページ3/結果ページを取得する必要があります

これを行うには、送信フォームからサーブレットに送信し、読み込みページを表示してから、データベースにデータが存在するかどうかを確認します。存在する場合は、結果ページにリダイレクトします。

これは私のローディングサーバーです

public class AffichageChargementServlet  extends HttpServlet{

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //recuperation de la clé de l'entité qui contiadra les resultats
        String key = req.getParameter("key");
        //affichage de la page de chargement
        try {
            getServletContext().getRequestDispatcher("/loading.html").forward(req, resp);
        } catch (ServletException e) {
            System.out.println("problemme dans la servlet AffichageChargementServlet lors du chargement de /loading.html");
            e.printStackTrace();
        }
        //verification de la disponibilité de l'entité
        Key resultatKey = KeyFactory.createKey("Resultat", key);
        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Entity result = null;
        while(true){
            try {
                result = datastore.get(resultatKey);
            } catch (EntityNotFoundException e) {
                System.out.println("pas encore prete");
                //ne rien faire, la data n'est pas encore disponible
            }
            if(result != null){
                System.out.println("redirection vers /affichageResults?key="+key);
                resp.sendRedirect("/affichageResults?key="+key);
            }
        }
    }

}

先ほど学習したように、サーブレットで複数のリダイレクトを実行することはできないため、java.lang.IllegalStateExceptionが発生します:応答はすでにコミットされています

回避策はありますか?

ありがとう

4

1 に答える 1

2

Response already committed応答に既に何かを書き込んでいて、転送またはリダイレクトしようとしていることを意味します。

応答に対して転送またはリダイレクトの両方を使用するのではなく、どちらかを使用する必要があります。コードは両方を行います。最初に転送するかリダイレクトするかを決定し、決定に基づいて応答をコミットする必要があります

于 2012-10-17T16:39:20.517 に答える