0

我正在使用 servlet 来制作基于 Java 的网站。我将计算数据发送到服务器,然后该服务器进行计算并将结果存储在数据库中。

我想要的是显示一个加载页面,所以我应该得到 1/表单提交 2/加载页面 3/结果页面

为此,我的提交表单将我发送到显示加载页面的 servlet 上,然后检查数据库是否存在数据,如果存在则将我重定向到结果页面。

这是我的加载服务

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

}

正如我刚刚了解到的,不可能在 servlet 中进行多次重定向,所以我得到一个 java.lang.IllegalStateException: Response already committed

有解决方法吗?

谢谢

4

1 回答 1

2

Response already committed means you have already write something on response and you are trying to forward or redirect.

You should use either of Forward or Redirect on the response not both, your code does both. You need to decide first whether you want to forward or redirect and then commit the response based on your decision

于 2012-10-17T16:39:20.517 回答