Struts 2 基於 Servlet API 封裝了 Session 操作,支持值類型與對象類型存儲,前端提供Struts 標籤、EL 表達式、原生 Java 代碼三種取值方式,靈活適配不同場景。
// 值類型
request.getSession().setAttribute("username", user.getUserName());
// 對象類型(需實現 Serializable)
request.getSession().setAttribute("user", user);
前端頁面:
<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()%> |
Serializable 接口,否則集群環境下會拋出 NotSerializableException<form:hidden> 與 <form:select> 會導致取值異常,刪除無用字段<%@ taglib prefix="s" uri="/struts-tags" %>#session 為 Struts 2 上下文映射,非原生 session 隱含對象session-timeout),平衡安全與體驗