javascript
Struts2项目中的JSP如何访问Session对象
Struts2 項目中,Session 對象存放在 ValueStack 的 context 對象中,context 是 Map 對象,那么要從 context 對象中獲取到 Session 對象,就要指定 key 值。我們查看 ValueStack 的內容:
從 ValueStack 顯示的內容可以知道,Session 存儲在 context 對象中,對應的 key 值是 session。并且我們還知道 Session 也是 Map 類型的,所以 Session 對象其實也是一個 Map 對象,是按鍵值對存儲數據的。
那么通過 ognl 表達式訪問 context 中的 Session 對象,獲取 Session 對象中 User 對象的 userName 屬性值,ognl 表達式可以這樣寫:
<s:property value="#session.user.userName"/>我們也可以通過 EL 表達式來獲取 Session 對象中的 User 對象的 userName 屬性值,EL 表達式的寫法如下:
${sessionScope.user.userName}如果你不指定查詢的范圍,那么 EL 表達式會從 ValueStack 的 root 對象中獲取 user 屬性的值,因為在 roo 對象中存在 Action 對象(Struts2 控制器自動將 Action 對象壓入 root 的棧頂),而 Action 對象存在 user 屬性。
上述講解中用到的 Action 組件是 LoginAction,代碼如下:
package priv.lwx.struts2.action;import com.opensymphony.xwork2.ActionContext; import org.apache.struts2.dispatcher.ApplicationMap; import priv.lwx.struts2.action.dao.UserDAO; import priv.lwx.struts2.action.entity.User;import java.util.Map;/*** description** @author liaowenxiong* @date 2022/2/14 11:54*/public class LoginAction {private User user;private UserDAO userDAO = new UserDAO();public String login() {System.out.println(user.getUserName());System.out.println(user.getPassword());User user = userDAO.login(this.user.getUserName(), this.user.getPassword());if (user != null) {// 登錄成功ActionContext act = ActionContext.getContext();Map<String, Object> session = act.getSession();String name = session.getClass().getName();// 將User對象存儲在Session對象中session.put("user", user);return "success";}// 登錄失敗return "fail";}public String form() {return "success";}public User getUser() {return user;}public void setUser(User user) {this.user = user;} }JSP 的代碼如下:
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Title</title> </head> <body> <h1>您好! </h1> <h1> <%-- <s:property value="#session.user.userName"/>--%><hr/>${sessionScope.user.userName} </h1> <s:debug/></body> </html>struts.xml 的內容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"> <struts><!-- 所有匹配*.action的請求都由struts2處理 --><constant name="struts.action.extension" value="action"/><!-- 是否啟用開發模式 --><constant name="struts.devMode" value="true"/><!-- struts配置文件改動后,是否重新加載 --><constant name="struts.configuration.xml.reload" value="true"/><!-- 設置瀏覽器是否緩存靜態內容 --><constant name="struts.serve.static.browserCache" value="false"/><!-- 請求參數的編碼方式 --><constant name="struts.i18n.encoding" value="utf-8"/><!-- 每次HTTP請求系統都重新加載資源文件,有助于開發 --><constant name="struts.i18n.reload" value="true"/><!-- 文件上傳最大值 --><constant name="struts.multipart.maxSize" value="104857600"/><!-- 讓struts2支持動態方法調用 --><constant name="struts.enable.DynamicMethodInvocation" value="true"/><!-- Action名稱中是否還是用斜線 --><constant name="struts.enable.SlashesInActionNames" value="false"/><!-- 允許標簽中使用表達式語法 --><constant name="struts.tag.altSyntax" value="true"/><!-- 對于WebLogic,Orion,OC4J此屬性應該設置成true --><constant name="struts.dispatcher.parametersWorkaround" value="false"/><package name="hellstruts" extends="struts-default" namespace="/demo01"><action name="login" class="priv.lwx.struts2.action.LoginAction" method="login"><result name="success">/WEB-INF/jsp/main.jsp</result><result name="fail">/login.jsp</result></action><action name="form" class="priv.lwx.struts2.action.LoginAction" method="form"><result name="success">/login.jsp</result></action></package></struts>總結
以上是生活随笔為你收集整理的Struts2项目中的JSP如何访问Session对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 早餐的英语怎么读 早餐的英语是什么
- 下一篇: 热泪满眶的意思 热泪满眶的意思是什么呢