當一個用戶登陸成功後,須要將用戶的用戶名添加爲Session狀態信息。
爲了訪問HttpSession實例,Struts 2提供了一個ActionContext類,該類提供了一個getSession的方法,但該方法的返回值類型並非HttpSession,而是 Map。這又是怎麼回事呢?實際上,這與Struts 2的設計哲學有關,Struts 2爲了簡化Action類的測試,將Action類與Servlet API徹底分離,所以getSession方法的返回值類型是Map,而不是HttpSession。
雖然ActionContext的getSession返回的不是HttpSession對象,但Struts 2的系列攔截器會負責該Session和HttpSession之間的轉換。
爲了能夠跟蹤用戶信息,咱們修改Action類的execute方法,在execute方法中經過ActionContext訪問Web應用的Session。修改後的execute方法代碼以下:html
- //處理用戶請求的execute方法
- public String execute() throws Exception {
- //當用戶請求參數的username等於scott,密碼請求參數爲tiger時,返回success字符串
- //不然返回error的字符串
- if (getUsername().equals("scott") && getPassword().equals("tiger") ) {
- //經過ActionContext對象訪問Web應用的Session
- ActionContext.getContext().getSession().put("user" , getUsername());
- return SUCCESS;
- } else {
- return ERROR;
- }
- }
爲了檢驗咱們設置的Session屬性是否成功,咱們修改welcome.jsp頁面,在welcome.jsp頁面中使用JSP 2.0表達式語法輸出Session中的user屬性。java
- <%@ page language="java" contentType="text/html; charset=GBK"%>
- <html>
- <head>
- <title>成功頁面</title>
- </head>
- <body>
- 歡迎,${sessionScope.user},您已經登陸!
- </body>
- </html>