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