0

HTTPSession からログアウトし、ユーザーをログイン ページにリダイレクトしようとしています。

以下は、私の完全な Http サーブレット コードです。

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

}

しかし、以下の例外が発生します:

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)
4

2 に答える 2

4

への呼び出しを削除

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

基本クラスの実装は、GET または POST がサポートされていないというエラー メッセージをスローしようとします。

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

上記の行は、すでに応答をコミットしたものです。

于 2013-06-27T21:09:18.107 に答える