2010-06-03 22 views
0

可以说我的表单称为servlet。我会做一些处理。在servlet中,我想在页面上打印一些内容。对,我用我们可以做getwriter并在单个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

不,你不能那样做。如果你已经调查过服务器日志文件,那么你应该注意到像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> 
+0

感谢您的答复。我试图用它来打印“处理你的请求”作为第一个响应,然后这个过程需要很长时间然后转发到jsp页面。 你可以建议我一种不使用AJAX的方法吗? – karanits 2010-06-04 19:29:35

+0

如果不使用AJAX,您将不得不求助于元刷新页面和会话范围。您可以在[本站点](http://simple.souther.us/not-so-simple.html)的“长时间运行过程”部分找到一个示例。 – BalusC 2010-06-04 19:43:40

相关问题