1. 程式人生 > >Struts2學習筆記(四):action中訪問request,session以及applicationContext等web資源的方法

Struts2學習筆記(四):action中訪問request,session以及applicationContext等web資源的方法

在struts2的action中有時會需要訪問request,session以及applicationContext等web資源,這裡我總結了四種可行的方法,供讀者參考。

(1)使用ActionContext

<pre name="code" class="java"><pre name="code" class="html">package com.jiajia.actions;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

public class TestActionContext {

	public String execute(){
		//獲取actionContext物件
		ActionContext context = ActionContext.getContext();
		
		//ActionContext中獲取的application是一個Map,裡面可以儲存需要的引數。
		Map<String, Object> application = context.getApplication();
		//在application中放置一個引數applicationAttr
		application.put("applicationAttr",
				"通過ActionContext的getApplication()方法獲取application");
		
		//ActionContext中獲取的session也是一個Map
		Map<String, Object> session = context.getSession();
		//在session中放置一個引數
		session.put("sessionAttr",
				"通過ActionContext的getSession()方法獲取session");
		
		//ActionContext中獲取的request也是一個Map,但獲取方法有別於session和application
		//ActionContext中並沒有getRequest()方法(我還不理解為什麼會這樣)
		Map<String, Object> request = (Map<String, Object>) context.get("request");
		//在request中放置一個引數
		request.put("requestAttr",
				"通過ActionContext的get(\"request\")方法獲取request");
		
		return "success";
	}
}


(2)使用ServletActionContext
<pre name="code" class="java">package com.jiajia.actions;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

/**
 * @author jiajia
 * 該類主要用來測試通過ServletActionContext類來
 * 直接獲取request、session以及application的方法
 */
public class TestServletActionContext {

	public String execute(){

		ServletContext application = ServletActionContext.getServletContext();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();

		//在application中放置一個引數applicationAttr
		application.setAttribute("applicationAttr",
				"通過ServletActionContext.getServletContext()獲取application");

		//在session中放置一個引數
		session.setAttribute("sessionAttr",
				"通過ServletActionContext.getRequest().getSession()獲取session");

		//在request中放置一個引數
		request.setAttribute("requestAttr",
				"通過ServletActionContext.getRequest()獲取request");

		return "success";
	}
}


(3)實現RequestAware, SessionAware, ApplicationAware介面
package com.jiajia.actions;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

/**
 * @author jiajia
 * 該類主要用來測試通過實現RequestAware, SessionAware, ApplicationAware介面,struts會自動向
 * 物件中注入Map型別的application、session、以及request屬性
 */
public class TestAware implements RequestAware, SessionAware, ApplicationAware{

	Map<String, Object> application;
	Map<String, Object> session;
	Map<String, Object> request;

	@Override
	public void setApplication(Map<String, Object> arg0) {
		this.application = arg0;
	}

	@Override
	public void setSession(Map<String, Object> arg0) {
		this.session = arg0;
	}

	@Override
	public void setRequest(Map<String, Object> arg0) {
		this.request = arg0;
	}

	public String execute(){
		//在application中放置一個引數applicationAttr
		application.put("applicationAttr",
				"通過實現ApplicationAware介面獲取application");
		
		//在session中放置一個引數
		session.put("sessionAttr",
				"通過實現SessionAware介面獲取session");
		
		//在request中放置一個引數
		request.put("requestAttr",
				"通過實現RequestAware介面獲取request");

		return "success";
	}

}
(4)實現ServletRequestAware, ServletContextAware介面
package com.jiajia.actions;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;

public class TestServletAware implements ServletRequestAware,
		ServletContextAware {
	
	ServletContext application;
	HttpServletRequest request;
	HttpSession session;

	@Override
	public void setServletContext(ServletContext arg0) {
		this.application = arg0;
	}

	@Override
	public void setServletRequest(HttpServletRequest arg0) {
		this.request = arg0;
	}

	public String execute(){

		session = request.getSession();
		
		//在application中放置一個引數applicationAttr
		application.setAttribute("applicationAttr",
				"通過實現ServletContextAware介面獲取application");

		//在session中放置一個引數
		session.setAttribute("sessionAttr",
				"通過實現ServletRequestAware介面獲取request再呼叫getSession()獲取session");
		//在request中放置一個引數
		request.setAttribute("requestAttr",
				"通過實現ServletRequestAware介面獲取request");

		return "success";
	}
}

上述四種方法中(1)和(3)與原始Servlet API是沒有耦合的,但功能也相對較弱,(2)和(4)與原始Servlet API是緊密耦合的,可以提供完整的servlet中的功能

完整示例程式碼:http://download.csdn.net/detail/jiajia333666/9050793

相關推薦

Struts2學習筆記action訪問requestsession以及applicationContextweb資源方法

在struts2的action中有時會需要訪問request,session以及applicationContext等web資源,這裡我總結了四種可行的方法,供讀者參考。 (1)使用ActionContext <pre name="code" class="java

shell編程學習筆記Shell轉義字符的輸出

特殊 進制 .sh 簡單 轉義 版本 col 輸出 asc 通過echo可以輸出字符串,下面看一下怎麽輸出特殊轉義字符,首先我先列出來echo的轉義字符: \\  輸入\ \a  輸出警告音 \b  退格,即向左刪除一個字符 \c  取消輸出行末的換行符,和-n選項

Unity3D之Mecanim動畫系統學習筆記Animation State

大致 面板 輸入 jpg any 動畫播放 速度 nsf 顯示 動畫的設置 我們先看看Animation Clip的一些設置: Loop time:動畫是否循環播放。 下面出現了3個大致一樣的選項: Root Transform Rotation:表示為播放動畫

.net core 2.0學習筆記遷移.net framework 工程到.net core

編譯 its evel hashtable ref 學習筆記 inline null 創建 在遷移.net core的過程中,第一步就是要把.net framework 工程的目標框架改為.net core2.0,但是官網卻沒有提供轉換工具,需要我們自己動手完成了

java學習筆記import語法

employee sign cnblogs java 調用 變量賦值 temp 職位 求職 Import 語法是給編譯器尋找特定類的適當位置的一種方法。 創建一個Employee 類,包括四個實體變量姓名(name),年齡(age),職位(designation)和薪水(s

HADOOP學習筆記HBase

系統 唯一性 創建時間 必須 就是 入口 計算 hfile mapreduce HBase簡介 Hbase是分布式、面向列的開源數據庫(其實準確的說是面向列族)。HDFS為Hbase提供可靠的底層數據存儲服務,MapReduce為Hbase提供高性能的計算能力,Zooke

javaweb學習筆記會話管理1

目錄 會話管理 1.概念 2.cookie技術 2.1 Cookie一般處理流程 2.2 Cookie類 會話管理 1.概念 一次會話: 開啟瀏覽器 -> 訪問一些伺服器內容 -> 關閉瀏覽器。(瀏覽器A給伺服器傳送請求,訪問web程式,該次會話就

學習筆記使用K近鄰演算法檢測WebShell

1.資料蒐集       載入ADFA-LD中正常樣本資料: def load_adfa_training_files(rootdir): x=[] y=[] list = os.listdir(rootdir) for i in

Scala學習筆記apply方法說明

調用 我們 val sca 關鍵字 語法糖 方式 rgs 類型 當scala中類或者對象有一個主要用途的時候,apply方法就是一個很好地語法糖。請看下面一個簡單的例子: class Foo(foo: String) {} object Foo { def appl

Python3學習筆記用Python實現深度優先

這裡主要是用Python實現下深度優先的概念,由於程式碼寫得比較隨意,就沒有封裝成類,而是寫成一個函式 用一個列表做為實驗資料,模擬成二叉樹結構,用遞迴的方式不斷獲取二叉樹上的左節點,一直到左節點 序號超出列表範圍,然後迴歸獲取右節點,以此來實現深度優先。 以下是程式碼

安卓開發學習筆記Android Stuidio無法實現隱式Intent是為什麼?

1 package com.example.lenovo.activitytest; 2 3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.view

圖解演算法學習筆記快速排序

本章內容:學習分而治之,快速排序 1) 示例1: 假設你是農場主,有一小塊土地,你要將這塊地均勻分成方塊,且分出的方塊儘可能大。如何分? 你要將這塊地均勻分成方塊,且分出的方塊要儘可能大。顯然,下面的分法不符合要求。 此時,你應該使用D&C策略(div

python學習筆記核心模組方法

核心模組1、__builtin__模組:一、數學運算類abs(x) 求絕對值 1、引數可以是整型,也可以是複數 2、若引數是複數,則返回複數的模 complex([real[, imag]]) 建立一個複數 divmod(a, b) 分別取商和餘數 注意:整型

各種音視訊編解碼學習詳解之 編解碼學習筆記Mpeg系列——Mpeg 4

   最近在研究音視訊編解碼這一塊兒,看到@bitbit大神寫的【各種音視訊編解碼學習詳解】這篇文章,非常感謝,佩服的五體投地。奈何大神這邊文章太長,在這裡我把它分解成很多小的篇幅,方便閱讀。大神部落格傳送門:https://www.cnblogs.com/skyofbitbit

Python3+OpenCV學習筆記影象濾波基礎均值、高斯、值、雙邊

OpenCV中還可以在影象上進行繪圖操作,由於資料都比較完善,所以附上鍊接,自行參悟。 好了,進入正題。在一張影象,在資料儲存或傳輸的過程中,或多或少都會引入噪聲,常見的影象噪聲如高斯噪聲、瑞利噪聲、椒鹽噪聲等,可參加連結:數字影象噪聲 為了避免噪聲對影象資訊進行干擾或

SpringBoot學習筆記SpringBoot整合Mybatis-Plus+程式碼生成

簡介 官網:http://baomidou.oschina.io/mybatis-plus-doc/ 平時業務程式碼不復雜的時候我們寫什麼程式碼寫的最多,就是我們的SQL語句啊,配置那麼多的Mapper.xml,還要配置什麼resultMap這些東西,還要去管理paramtype

朱老師ARM裸機學習筆記S5PV210啟動過程詳解

常用器件特性 記憶體: SRAM 靜態記憶體 特點就是容量小、價格高,優點是不需要軟體初始化直接上電就能用 DRAM 動態記憶體 特點就是容量大、價格低,缺點就是上電後不能直接使用,需要軟體初始化後才可以使用。 微

PostgreSQL學習筆記運算子&函式

文章目錄 1 運算子&函式 1.1 運算子 1.1.1 算數運算子 1.1.2 關係運算符 1.1.3 邏輯運算子 1.2 函式 1.2.

PE檔案學習筆記重定位表Relocation Table解析

1、重定位表的作用 重定位表(Relocation Table)用於在程式載入到記憶體中時,進行記憶體地址的修正。為什麼要進行記憶體地址的修正?我們舉個例子來說:test.exe可執行程式需要三個動態連結庫dll(a.dll,b.dll,c.dll),假設te

Struts2學習筆記struts2開發環境配置

寫在前面:本人雖然接觸JavaWeb開發有一段時間了,但之前一直迫於專案需求,需要什麼就簡單的去學習什麼,只求實現功能。過程中雖然也有收穫,但更多的時候,看到別人的程式碼總感覺自己的程式碼慘不忍睹,而且往往會走很多的彎路。痛定思痛決心重頭系統學習相關知識點,在這裡寫部落格