首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Struts 2 Session 操作全解析:後台存取與前端多標籤取值技巧

     編輯:Java 綜合教學

Struts 2 中 Session 管理核心模式

Struts 2 基於 Servlet API 封裝了 Session 操作,支持值類型與對象類型存儲,前端提供Struts 標籤、EL 表達式、原生 Java 代碼三種取值方式,靈活適配不同場景。

一、後台 Session 存取

1. 存儲數據

// 值類型
request.getSession().setAttribute("username", user.getUserName());

// 對象類型(需實現 Serializable)
request.getSession().setAttribute("user", user);

2. 表單數據自動封裝

前端頁面:

<s:form action="login1">
    <s:textfield name="user.userName" label="用戶"/>
    <s:textfield name="user.password" key="pass" />
    <s:submit key="login" />
</s:form>

後端 Action:

// 對象級封裝(需提供 getter/setter)
private User user;
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }

// 單值封裝
private String password;
public void setPassword(String password) { this.password = password; }

二、前端多種取值方式對比

數據類型Struts 標籤EL 表達式Java Scriptlet
值類型<s:property value="#session.username" />${session.username}<%=session.getAttribute("username")%>
對象屬性<s:property value="#session.user.userName" />${session.user.password}<%=((User)session.getAttribute("user")).getPassword()%>

三、關鍵注意事項

  • 對象序列化:存入 Session 的對象必須實現 Serializable 接口,否則集群環境下會拋出 NotSerializableException
  • 命名衝突:同頁面存在同名 <form:hidden> 與 <form:select> 會導致取值異常,刪除無用字段
  • 標籤庫引入:JSP 頭部需聲明 <%@ taglib prefix="s" uri="/struts-tags" %>
  • OGNL 表達式:#session 為 Struts 2 上下文映射,非原生 session 隱含對象

四、最佳實踐建議

  1. 優先使用 EL 表達式,語法簡潔、不依賴 Struts 標籤庫、利於前後端分離
  2. 敏感對象(如 User)存入 Session 前脫敏處理,移除密碼等機密字段
  3. Session 存儲盡量精簡,大對象改用 Redis 等外部存儲
  4. 設置合理 超時時間(web.xml session-timeout),平衡安全與體驗
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved