【问题标题】:How to avoid finally or avoid forward in Servlet switch case? [duplicate]如何在 Servlet 切换案例中避免 finally 或避免 forward? [复制]
【发布时间】:2016-03-11 22:07:55
【问题描述】:

这是doPost中的代码:

try {
    switch (request.getParameter("action")){
        case "delete":
            request.setAttribute("message", "Deleting...");
            break;
        case "update":
            request.setAttribute("message", "Updating...");
            break;
        case "new":
            response.sendRedirect("createNew.jsp");     
            break;
        default:
            super.doPost(request, response);
            break;
    }
} finally {
    request.getRequestDispatcher("backHome.jsp").forward(request, response);
    out.close();
}

问题出在最后,当案例是“新”时,我得到了这个异常: java.lang.IllegalStateException:

【问题讨论】:

    标签: java jsp servlets jstl


    【解决方案1】:

    如果是“新”,你正在做response.sendRedirect("createNew.jsp");。此时响应流被写入。

    最后你正在做request.getRequestDispatcher("backHome.jsp").forward(request, response);。它正在转发到另一个 url。

    但是由于在响应中已经写入了一些内容,因此不会发生另一个转发。这个扔java.lang.IllegalStateException

    【讨论】:

    • 还有,我能做些什么来解决这个问题?你能帮忙吗?
    • 你想对所有情况执行 finally 吗?
    • 最终重定向,但如果任何其他情况重定向到另一种方式,则不会产生异常。
    • 最后提取出你所拥有的东西到一个单独的方法中。在您需要的地方从轻松切换案例中调用该方法。您不需要“新”,因为它已经重定向,然后您无法转发到另一个页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多