1. 程式人生 > >第20講 struts2獲取狹義和廣義的值棧資料

第20講 struts2獲取狹義和廣義的值棧資料

值棧的理解: 值棧是對應每個請求物件的一套記憶體資料的封裝,Struts2 會給每個請求建立一個新的值棧。 值棧能夠執行緒安全地為每個請求提供公共的資料存取服務 1複製專案HeadFirstStruts2chapter03 ,改名為HeadFirstStruts2chapter04,新建HelloAction,重寫execute()方法,刪除其他多餘的包和類,通過ActionContext獲取actionContext物件,用actionContext物件獲取值棧物件(狹義的值棧),在值棧中設定值。以此類推:分別獲取request,session,application中的值,package com.cruise.action;import

 java.util.Map;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 extends ActionSupport{               @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=26ps: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 順序查詢