2011-05-01 141 views
4

我是新來的Tomcat,小服務程序和Spring Web裏面的會話cookie。我來自PHP背景,所以我有點迷失方向,至少可以說。我想要一個控制器爲我創建一個會話cookie。創建控制器

我已經告訴我可以在一個標準的servlet像這樣的會議:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
    // Somewhere inside the method... 
    HttpSession session = request.getSession(true); 

    // Set a cookie 
     session.setAttribute("hello", "world"); 

    // More stuff... 
} 

這是如何轉化爲做事的Spring Web MVC框架的方式?我可以在控制器內創建會話cookie嗎?

回答

4

在Java Servlet的(和Spring MVC尤其是)你不會話cookie直接交互,真正正確編寫基於Servlet的應用程序應該沒有啓用cookie,自動回落到基於URL的會話ID。

您提供的方式是正確的,雖然春天是給你更好的(高層)方法,如session-scoped豆。這種方式你永遠不會與會話本身進行交互。

+0

您鏈接到2.5.X文檔。你的意思是http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory-scopes-other? – Pieter 2011-05-01 10:33:26

+0

應該不重要(我在Google上找到的第一個),但我將鏈接固定爲3.0,謝謝。 – 2011-05-01 11:21:38

2

您可以通過它在你的控制器的方法,(S)的參數可以訪問HttpSession對象:

public String get(Long id, HttpSession session) { 

} 

Spring會注入當前HttpSession對象的你,並從那裏你可以設置屬性(就像你在你的問題中所做的那樣)。

5

你在你的例子在做什麼,什麼都沒有做餅乾。 session.setAttribute(「key」,valueObject); 在會話中設置一個java對象。會話保存在服務器上。 sessionid是唯一傳達給客戶端的東西。它可以是一個cookie或它可以在URL中。會話中的屬性未被序列化爲字符串。在另一方面

Cookies是發送回客戶端的字符串。客戶有責任存儲他們的cookies(有些人將其關閉)並將它們返回給服務器。

從一個複雜的對象的圖形化設置cookie的值將需要序列化和反序列化。會話屬性不會。

如果你想讀一個cookie,使用此:

@CookieValue("key") String cookie 

在控制器的參數列表。 cookie變量將填充來自名爲「key」的cookie的值。

設置cookie,電話:

response.addCookie(cookie); 
+0

謝謝!我個人認爲這是這個線程/問題中最有用和最正確的答案。 – Javatar 2013-11-07 10:23:34