0

假设我的表单称为 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 页面,就好像代码没有运行一样。

4

1 回答 1

0

不,你不能那样做。如果您调查过服务器日志文件,那么您应该注意到类似 as 的内容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>
于 2010-06-03T11:31:39.700 回答