1. 程式人生 > >Struts2獲取Servlet API的兩種方式

Struts2獲取Servlet API的兩種方式

一、IoC方式
在Struts2中,所有請求都會被StrutsPrepareAndExecuteFilter攔截,然後去struts.xml尋找相印的action,在action執行前,會執行一些interceptor。在 struts-default.xml中,有個攔截器為
<interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
一部分原始碼

  public String intercept
(ActionInvocation invocation) throws Exception { final Object action = invocation.getAction(); final ActionContext context = invocation.getInvocationContext(); if (action instanceof ServletRequestAware) { HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST); ((ServletRequestAware) action).setServletRequest(request); } if
(action instanceof ServletResponseAware) { HttpServletResponse response = (HttpServletResponse) context.get(HTTP_RESPONSE); ((ServletResponseAware) action).setServletResponse(response); } if (action instanceof ServletContextAware) { ServletContext servletContext = (ServletContext) context.get(SERVLET_CONTEXT); ((ServletContextAware) action).setServletContext(servletContext); } return
invocation.invoke();

於是我們可以通過IoC的方式,將Servlet物件注入Action中。

package action;
/**
 * @author ZZ
 * ****/
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

public class Struts2Action  implements ServletRequestAware,ServletResponseAware,ServletContextAware{

    @Override
    public void setServletContext(ServletContext context) {

    }

    @Override
    public void setServletResponse(HttpServletResponse response) {

    }

    @Override
    public void setServletRequest(HttpServletRequest request) {

    }


}

通過實現ServletRequestAware 獲得HttpServletRequest,
實現 ServletResponseAware 獲得HttpServletResponse,
實現 ServletContextAware來獲得HttpServletContext。
SessionAware之類的就不寫了。

二、非IoC方式
通過ServletActionContext的靜態方法獲取。
這裡寫圖片描述

package action;

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

import org.apache.struts2.ServletActionContext;

/**
 * @author ZZ
 * ****/

public class Struts2Action  {
    public void test(){
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        ServletContext servletContext = ServletActionContext.getServletContext();
    }
}

相關推薦

Struts2獲取Servlet API方式

一、IoC方式 在Struts2中,所有請求都會被StrutsPrepareAndExecuteFilter攔截,然後去struts.xml尋找相印的action,在action執行前

struts2獲取Servlet API方法

1.通過ServletActionContext獲取    在Action中呼叫ServletActionContext的靜態方法來獲取:        HttpServletRequest request  = ServletActionContext.getRequest

文字框自動獲取焦點的方式

文字框自動獲取焦點的兩種方式 1、html5的autofocus屬性 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>

Java獲取年月日的方式

方式一: Calendar calendar = Calendar.getInstance(); System.out.println(calendar.get(Calendar.YEAR)); Sy

HttpClient獲取Cookie的方式

一、舊版本的HttpClient獲取Cookies p.s. 該方式官方已不推薦使用 使用DefaultHttpClient類例項化httpClient物件: public static String dooPost_deprecated(String

RabbitMQ Consumer獲取訊息的方式(poll,subscribe)解析

http://blog.csdn.net/yangbutao/article/details/10395599 rabbitMQ中consumer通過建立到queue的連線,建立channel物件,通過channel通道獲取message, Consumer可以宣告式的

Struts2整合Spring的方式(最新)

方式一隻需要在專案中引入struts2-spring-plugin-2.2.1.1.jar這個Jar包就可以了。這個Jar包引入之後確保web.xml中載入了spring配置,否則會報空指標異常(原因是方式一會自動在spring配置檔案中找action依賴的service,

struts2 接受引數的方式(屬性驅動和模型驅動)

定義: 在struts2中,頁面的資料和action(控制層)傳輸基本上有兩種方式,一個是屬性驅動、另一個是模型驅動。 屬性驅動 基本資料型別的屬性對應: 就是Web頁面上html標籤

Java反射機制及其獲取InputStream的方式

圖一: java.lang.Class:是反射的源頭。      我們建立了一個類,通過編譯(javac.exe),生成對應的.class檔案。之後我們使用java.exe載入(JVM的類載入器完成的)      此.class檔案,此.class檔案載入到記憶體以後

【Angular2】CheckBox獲取值的方式

前言 因為專案中需要用到CheckBox向後臺提交資料 最開始設定的是學生選擇什麼就直接把答案合成一個字串傳到後端 但是需要回顯學生答案,後端返回的json資料中答案是一個處理後的字串,無法進行判

Struts2訪問Servlet的三方式

思維導圖 實現特定介面訪問 package com.pc.web.action; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Http

Struts2獲取Session的三方式

1、Map<String,Object> map =  ActionContext.getContext().getSession();2、HttpSession session = ServletActionContext.getRequest().getSes

瀏覽器獲取cookie的方式

1 使用者登入成功後在放入session後,向用戶的瀏覽器cookie中插入使用者資料  //將使用者資訊放入session中session.setAttribute("user", select_user);//將使用者資訊通過response寫入cookie//cook

java動態獲取WebService的方式(復雜參數類型)

args oid 類型 ade poi 參數類型 pid eth lse java動態獲取WebService的兩種方式(復雜參數類型) 第一種: @Override public OrderSearchListRes searchOrderList(Order_Fligh

微信公眾號開發之網頁授權(獲取使用者資訊方式

  這次暑假留在學校參與工作室的專案,對微信公眾號比較感興趣,所以參與這方面的學習研究。昨天完成了關於網頁授權,獲取使用者資訊方面的功能,所以乘熱打鐵,寫上一篇。實現本篇涉及的功能,還需要完成一些基礎。在寫完這篇部落格後,我會盡快補上。-------------------------廢話不多說直入正題需要的

VS2010-VB.NET中從DataSet獲取資料的方式

SQL 如下 " SELECT " & vbCrLf & _ " ID_NO, " & vbCrLf & _ " AA, " & vbCrLf & _ " BB, " & vbCrLf

Request獲取Session的方式

1、無請求引數 public HttpSession getSession() 獲取當前request關聯的session,如果當前request沒有session,建立一個session. 2、有請求引數 public HttpSession

Struts2後臺校驗方式

HTTP Status 404 - No result defined for action cn.itcast.a_validation.RegisterAction and result input

java如何獲取隨機數(方式

在小的知識,都有深挖之價值。 很久沒有生產隨機數,竟然忘了!我明明記得我做過關於隨機數產生的總結,but,我翻遍了整個筆記本,就是沒找到。即便我知道筆記就在某一個角落;我還是放棄了查詢筆記,跑去Google了,所以我決定建立電子筆記,記錄那些小知識點。 //獲取100以內

SpringBoot整合Servlet方式

dem javax boot 註解 auth get extend exce col SpringBoot整合Servlet有兩種方式: 1.通過註解掃描完成Servlet組件的註冊; 2.通過方法完成Servlet組件的註冊; 現在簡單記錄一下兩種方式的實現