我有一個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