-1

当运行下面的代码并且我收到的输出是“in”时,但是响应 .sendRedirect() 没有运行。两个 java servlet 文件“Class1”和“Servlet1”在同一个文件夹中。

public class Class1 extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws IOException, ServletException {

       response.setContentType("text/html; charset=ISO-8859-7");
       PrintWriter out = new PrintWriter(response.getWriter(), true);

       ArrayList list2 = (ArrayList)request.getAttribute("list_lo");

       if (list2 == null || list2.isEmpty() ) {
          out.println("in");
          response.sendRedirect("Servlet1");
          return;}
       }


}
4

2 回答 2

0

尝试使用扩展名而不是类名放置文件的名称,有时发生在我身上,并且这样做就可以了

于 2015-11-12T10:59:56.133 回答
0

一旦开始返回任何输出,就无法发送重定向。

您需要在任何输出开始之前放置处理任何可能重定向的逻辑(例如out.println()在您的示例中)。无论如何,将重定向逻辑放在方法的最开始是一件明智的事情,因为它应该是您决定的第一件事。

输出启动后重定向的原因在于 HTTP 协议本身——重定向是使用响应头传输的,响应头与响应体之间用空行分隔。一旦您开始编写响应正文,就无法再传输任何标头(如果幸运的话,除了开始的输出仍在缓冲区中之外)。

于 2015-11-12T12:14:40.100 回答