简体   繁体   English

提交响应后无法转发-Servlet

[英]Cannot forward after response has been committed - Servlet

I am trying to logout from the HTTPSession and redirect the user to the login page. 我正在尝试从HTTPSession注销,并将用户重定向到登录页面。

Below is my complete Http servlet code as is. 以下是我完整的Http servlet代码。

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LogoutServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
{
    super.doGet(req, resp);
    processRequest(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
{
    super.doPost(req, resp);
    processRequest(req, resp);
}

private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    final HttpSession session = request.getSession(false);
    if (session != null) 
    {
        session.invalidate();
    }

    response.sendRedirect("/login.html");
    //getServletContext().getRequestDispatcher("/login.html").forward(request, response);
}

} }

But getting the below exception: 但是得到以下异常:

java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:339)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at com.controller.LogoutServlet.processRequest(LogoutServlet.java:41)

Remove calls to 删除对

super.doGet(req, resp); // and
super.doPost(req, resp);

The Base class implementations simply try to throw an error message that GET or POST is not supported. 基类的实现只是尝试抛出一条错误消息,即不支持GET或POST。

// HttpServlet#doGet() calls
resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);

The above line is what has already committed the response. 上一行是已经提交响应的内容。

为什么不重定向而不是转发?

    response.sendRedirect("/login.html");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM