我们可以在一个servlet中做getwriter和forward

时间:2010-06-03 08:17:21

标签: jsp servlets forwarding

让我说我的表单称为servlet。我会做一些处理。在servlet中我想在页面上打印一些东西。因为我用过

PrintWriter out=response.getWriter();
 out.println("some text here");

然后在servlet中我做了一些更好的表单处理工作正常,之后我想将servlet转发到jsp页面。为此我用了

RequestDispatcher rd = request.getRequestDispatcher("/somepage.jsp");
 rd.forward(request, response);

问题来了。文字

some text here

被打印,但servlet不会将请求转发到jsp页面,就好像代码没有运行一样。

1 个答案:

答案 0 :(得分:0)

不,你不能这样做。如果您已经调查过服务器日志文件,那么您应该注意到IllegalStateException: cannot forward, response already committed

之类的内容

向响应写入内容将提交响应并将响应头和写入的字节发送到客户端。但是之后发送转发可能需要更改响应标头,这是不可能的,因为这些已经发送。服务器无法获取已发送的标头和字节,并重做响应。这是一个不归路的点。

在servlet中发出一些HTML /模板输出也被认为是不好的做法。您应该在JSP中执行此操作。您可以将消息存储在请求范围中,并在JSP中使用EL来显示它。

例如:

request.setAttribute("message", "some message"); // Will be available as ${message}
request.getRequestDispatcher("/somepage.jsp").forward(request, response);

并在somepage.jsp

<p>Message: ${message}</p>