sendRedirect不重定向

时间:2012-05-02 09:58:28

标签: java servlets

我正在尝试创建一个Java控制器servlet来将用户注销会话。 我知道有两种方法,一种是使用sendRedirect,另一种是RequestDispatcher。在我的情况下,我想将它们发送到域外的页面,这对我有限的Java知识要求我使用sendRedirect。

但是,我收到错误302并且页面没有被重定向。我已经尝试了一个教程版本并且它可以工作,但是当我在我的Servlet中实现它时,它会返回错误并且不会重定向。

我希望有人能指出我正确的方向。

我正在使用的代码如下。我正在使用netbeans模板:


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        HttpSession session = request.getSession(false);
        if (session == null) {
            System.out.println("Invalid");
            response.sendRedirect("http://www.google.com");
            return;
        } else {
            System.out.println("Invalidated");

            session.invalidate();
            response.sendRedirect("http://www.google.com");
            return;
            /*
            String url = "/logout.jsp";

            ServletContext sc = getServletContext();
            RequestDispatcher rd = sc.getRequestDispatcher(url);
            rd.include(request, response);

             */
        }
        /* TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet LogOut</title>");  
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Servlet LogOut at " + request.getContextPath () + "</h1>");
        out.println("</body>");
        out.println("</html>");
         */
    } finally {            
        out.close();
    }
}

编辑:我正在通过<a href>标记调用servlet。 Servlet名称是LogOut.java。

        <div data-role="header" data-position="fixed">
            <h1>Menu</h1>
            <a href="LogOut" data-theme="i">Log Out</a>
        </div>

doGet和doPost调用processRequest。

    @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/** 
 * Handles the HTTP <code>POST</code> method.
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

1 个答案:

答案 0 :(得分:0)

响应的标准重定向是应用程序中的引用。 为了解决这个问题,我创建了一个简单的HTML页面,其中元数据刷新到外部页面: http://www.w3schools.com/tags/tag_meta.asp
例如:
<meta HTTP-EQUIV="refresh" CONTENT="2; URL=http://www.google.be;">

如果自动转发失败,请确保使用简单的超链接访问外部页面。

经过测试,来自Servlet的响应被重定向到我自己的转发页面并且瞧...