我有一个web应用程序,其中包含两个servlet,一个用于呈现我的JSP页面,另一个用于生成PDF。我在JSP页面之间使用会话状态,并希望将会话对象传递给PDF servlet。如何在servlet之间共享会话状态?
这里是我如何在JSP设置会话值的示例:
MyObject o = (MyObject)session.getAttribute("my.object");
if (o == null)
{
o = new MyObject();
session.setAttribute("my.object", o);
}
然后我从一个链接后回我的PDF生成新的servlet在我的JSP
<a href="../pdfgen?f=d&t=c" target="_blank">Generate a draft report for review</a>
我想我可以使用HTTPRequest对象来返回我的servlet中的会话,如下所示:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
HttpSession session = request.getSession(false);
MyObject o = (MyObject) session.getAttribute("my.object");
}
使用上面的代码,我从请求中获得一个空会话对象。
如果我使用request.getSession(true)
,我得到一个会话对象,但当然它不包含属性my.object
中的任何内容。
这应该如何工作?关于在servlet之间共享会话状态的规则是什么?
的Tomcat 6
TIA
谢谢你的小脚本的意见,我也是这么想的,但是我不认为代码的根本上重新架构是边界,现在,这是什么,将需要。 – Simon 2011-03-04 18:37:27
我正在使用默认的JSP servlet来呈现主页面。 PDF servlet是完全独立的。由于我正在处理完全不同的servlet,因此我不太了解JSP如何实现响应。 – Simon 2011-03-04 18:42:03
发送HTTP响应头时会提交响应。您最好的尝试是将scriptlet放在JSP页面的**顶部**之前,并且可以将任何字符/行的模板文本发送到客户端,从而强制提交响应。如果这没有帮助,请创建一个在'doGet()'中执行作业的servlet,然后将请求转发到JSP以显示HTTP响应(然后更改URL以调用该servlet而不是JSP)。 – BalusC 2011-03-04 18:46:18