第20講 struts2獲取狹義和廣義的值棧資料
阿新 • • 發佈:2018-11-10
值棧的理解:
值棧是對應每個請求物件的一套記憶體資料的封裝,Struts2 會給每個請求建立一個新的值棧。 值棧能夠執行緒安全地為每個請求提供公共的資料存取服務
1複製專案HeadFirstStruts2chapter03 ,改名為HeadFirstStruts2chapter04,新建HelloAction,重寫execute()方法,刪除其他多餘的包和類,通過ActionContext獲取actionContext物件,用actionContext物件獲取值棧物件(狹義的值棧),在值棧中設定值。以此類推:分別獲取request,session,application中的值,
package com.cruise.action;
import
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
public class HelloAction
@Override
public String execute() throws Exception {
ActionContext actionContext = ActionContext.getContext
ValueStack valueStack = actionContext.getValueStack();
valueStack.set("name", "張三(ValueStack)");
valueStack.set("age", "11(ValueStack)");
HttpServletRequest request = (HttpServletRequest) actionContext.get(ServletActionContext.HTTP_REQUEST);
request.setAttribute("name", "李四(request)");
request.setAttribute("age", "12(request)");
Map session = actionContext.getSession();
session.put("name", "王五(session)");
session.put("age", "13(session)");
Map application = actionContext.getApplication();
application.put("name", "趙六(application)");
application.put("age", "14(application)");
return "success";
}
}
2success.jsp檔案,刪除其他多餘的jsp檔案,引入struts標籤,獲取值棧的資料,
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
狹義上的值棧的資料:<s:property value="name"/><s:property value="age"/><br>
請求引數的的資料:<s:property value="#parameters.name"/><s:property value="#parameters.age"/><br>
request的資料:<s:property value="#request.name"/><s:property value="#request.age"/><br>
session的資料:<s:property value="#session.name"/><s:property value="#session.age"/><br>
application的資料:<s:property value="#application.name"/><s:property value="#application.age"/><br>
attr的資料:<s:property value="#attr.name"/><s:property value="#attr.age"/><br>
body>
html>
3struts.xml定義action,
xml version="1.0" encoding="UTF-8" ?>
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="manage" namespace="/" extends="struts-default">
<action name="hello" class="com.cruise.action.HelloAction" >
<result name="success" >success.jspresult>
action>
package>
struts>
4測試
http://localhost:8080/HeadFirstStruts2chapter04/hello?name=cruise&age=26
ps:OGNL 是物件圖導航語言 Object-GraphNavigationLanguage 的縮寫,它是一種功能強大的表示式語言。
OGNL 訪問 ValueStack 資料
OGNL 訪問 ActionContext 資料
訪問某個範圍下的資料要用#
#parameters 請求引數request.getParameter(...);例如:http://www.baidu.com?name=cruise
#request 請求作用域中的資料 request.getAttribute(...);
#session 會話作用域中的資料 session.getAttribute(...);
#application 應用程式作用域中的資料 application.getAttribute(...);
#attr 按照 pagerequestsessionapplication 順序查詢