1. 程式人生 > >Struts2訪問Servlet的三種方式

Struts2訪問Servlet的三種方式

思維導圖

實現特定介面訪問
package com.pc.web.action;
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;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 使用特定介面訪問Servlet物件
 * @author Switch
 *
 *  
[email protected]
* [email protected] * [email protected] * [email protected] * 是由一個名稱為servletConfig的攔截器為我們封裝的 */ public class ActionTest7 extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware { private HttpServletRequest request; private HttpServletResponse response; private ServletContext application; /** * @return */ public String demo(){ System.out.println(request); System.out.println(response); System.out.println(application); System.out.println(request.getSession()); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } @Override public void setServletResponse(HttpServletResponse response) { this.response = response; } @Override public void setServletContext(ServletContext application) { this.application = application; } }
通過ServletActionContext類
package com.pc.struts2.web.action;

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

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 訪問ServletAPI的方式
 *
 * 使用Struts2框架提供了一個工具類:
 *         ServletActionContext
 * 它裡面提供了對應的靜態方法,可以直接獲取ServletAPI
 *
 * 有一個需要注意的問題:
 *        
[email protected]
* [email protected] * [email protected] * [email protected] * * requet物件已經不是原來tomcat提供的了,而是被struts2框架包裝過了。 * 包裝使用的是裝飾者模式。 * 裝飾者模式的作用是對方法進行增強。 * * @author Switch */ public class ActionAPITest extends ActionSupport { /** * 在Struts2框架中使用ServletAPI * @return */ public String useServletAPI() { HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session = request.getSession(); ServletContext application = ServletActionContext.getServletContext(); System.out.println(request); System.out.println(response); System.out.println(session); System.out.println(application); return "success"; } }
通過ActionContext類
package com.pc.web.action;

import java.util.Map;

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

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * ActionContext類介紹
 *      它是Struts2框架為我們提供的一個工具類。
 *      該類可以通過方法直接獲取request,response,servletContext物件
 * @author Switch
 * 
 *  context.getParameters(); == request.getParameterMap(); 獲取的是請求引數
 */
public class ActionTest8 extends ActionSupport implements StrutsStatics {

    private HttpServletRequest request;
    private HttpServletResponse response;
    private ServletContext application;

    /**
     * 使用ActionContext訪問ServletAPI
     * @return
     */
    public String demo(){
        ActionContext context = ActionContext.getContext();

        request = (HttpServletRequest) context.get(HTTP_REQUEST);
        response = (HttpServletResponse) context.get(HTTP_RESPONSE);
        application = (ServletContext) context.get(SERVLET_CONTEXT);
        System.out.println(request);
        System.out.println(response);
        System.out.println(application);
        System.out.println(request.getSession());
        /*[email protected]
        [email protected]
        [email protected]
        [email protected]*/

        return SUCCESS;
    }

    /**
     * 使用原始ServletAPI物件,往session域和application域中存入資料
     * session域中存入         key=sessionAttr          value=hello session attr
     * application域中存入  key=applicationAttr     value=hello application attr
     * @return
     */
    public String demo2(){
        //1.獲取session物件
        HttpSession session = ServletActionContext.getRequest().getSession();
        //存入資料
        session.setAttribute("sessionAttr", "hello session attr");
        session.getId();
        //2.獲取ServletContext
        ServletContext application = ServletActionContext.getServletContext();
        application.getRealPath("/WEB-INF/uploads");
        //存入資料
        application.setAttribute("applicationAttr", "hello application attr");
        return SUCCESS;
    }


    /**
     * 使用ActionContext類中的getSession()和getApplication()獲取到的map來往map中存入資料
     * sessionMap中存入         key=sessionAttr          value=hello session map
     * applicationMap中存入  key=applicationAttr     value=hello application map
     * @return
     */
    public String demo3(){
        //1.獲取ActionContext物件
        ActionContext context = ActionContext.getContext();
        //2.獲取sessionMap
        Map<String,Object> sessionMap = context.getSession();
        sessionMap.put("sessionAttr", "hello session map");
        //3.獲取applicationMap
        Map<String,Object> applicationMap = context.getApplication();
        applicationMap.put("applicationAttr", "hello application map");
        return SUCCESS;
    }

}
ActionContext類訪問Servlet API的常用方法
方法宣告 功能描述
void put(String key, Object value) 將 key-value鍵值對放入ActionContext 中,模擬Servlet API中的HttpServletRequest的setAttributeO方法。
Object get(String key) 通過引數key來查詢當前ActionContext中的值。
Map<String, Object> getApplication() 返回一個Application級的Map物件。
static ActionContext getContext() 獲取當前執行緒的ActionContext物件。
Map<String, Object> getParameters() 返回一個包含所有HttpServletRequest引數資訊的Map物件。
Map<String, Object> getSession() 返回一個Map型別的HttpSession物件。
void setApplication(Map<String, Object> application)  設定Application上下文。
void setSession(Map<String, Object> session) 設定一個Map型別的Session值 。
PS:通過對這三種方式的使用,可以發現通過實現特定介面和使用ServletActionContext類,Action是與Servlet API進行直接耦合的,這樣並不利於程式解耦。所以開發中建議優先使用ActionContext。 PS:雖然這樣,在控制器與Servlet API解耦了,但是在Struts2中肯定有一部分程式碼還是和Servlet API有耦合,這是毋庸置疑的。如果我們只是需要使用Servlet API中域物件中的域(鍵值對,存放資料的),那麼就使用ServletContext,如果需要使用除了域之外的其他東西,那麼還是要使用ServletActionContext的

相關推薦

Struts2訪問Servlet的API方式:介面注入

jsp:前段頁面 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DT

HTML HTMLCollection對象訪問方式

HTML HTMLCollection對例: <form action="" name="lee"> <input type="text"> </form> 通過getElementsByTagName: var form = document.getElemen

Struts2訪問Servlet的API方式二:原生方式

前端jsp: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01

結構體初始化 訪問方式(結構體指標)

輸出三個學生中成績最高的學生資訊 1>  #include<stdio.h> typedef struct student {     int num;     char name[10];     int score; } Student; int m

Struts2訪問Servlet方式

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

Struts2訪問Servlet API的幾方式

直接 param text cti ring alt getc nbsp context struts2提供了三種方式訪問servlet API:大致分為兩類 1. ActionContext: public static ActionContext getConte

Strtus2訪問Servlet的API 方式

不一樣的地方就是下圖所示: --------------------------------------------以下是具體程式碼過程----------------------------------------- 以下是demo1.jsp程式碼 <%@ page language="

Action訪問ServletAPI的方式

mvc 構造 缺點 思想 一個 前言 line api 這也 一、前言 Struts是一種基於MVC設計模式的web應用框架,主要擔任C的角色,用於分離頁面顯示和業務邏輯處理,那其實在我們學習jsp的時候學過一個具有類似功能的東西——servlet。其實Struts本質上相

Struts2學習(二)運行Action中方法的方式

tracking 利用 content con return -m i++ var itl 1.運行execute()方法 一般的能夠直接在action中書寫execute,調用action時會自己主動運行此方法 2.配置method方法 在s

5.struts2中Action類中獲取ServletAPI的方式

靜態方法 ttr intercept println action 需求 對象實例 ext.get ctype **Servlet的API的訪問(開發中偶爾會使用到)** 1.在Action類中也可以獲取到Servlet一些常用的API,有如下三種方式獲取 *

創建servlet方式

告訴 open 創建 esp tps 獲取 pack view throw 第一種方式,實現Servlet接口 1 package com.example.servlet; 2 3 import java.io.IOException; 4 5 impor

搭建FTP服務,實現方式訪問:1.匿名訪問;2,本地用戶訪問;3虛擬用戶訪問

行程 工作環境 能夠 ftp用戶 a10 linu 進入 編輯 binary FTP服務(File Transfer Protocol,文件傳輸協議)是典型的C/S結構 的應用層協議,需要由服務端軟件,客戶端軟件兩部分共同實 現文件

ASP.NET中 C#訪問資料庫用方式顯示資料表

第一種方式:使用DataReader從資料庫中每次提取一條資料,用迴圈遍歷表                下面是我寫的一個例子:  &nbs

struts2使用session 的方式

1、通過上下文,從ActionContext中獲取 ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); 2、實現SessionAware介面

struts2傳遞引數的方式

作用:每次訪問struts2的任何一個action方法時,若該方法裡面需要物件的值,完全可以用struts2傳遞引數的三種方式: struts2傳遞引數的三種方式 在傳統的servlet中我們採用request和response傳遞引數,但是struts2如果想用同樣的

Struts2 接受引數的方式

1. 屬性方式     1. Action 宣告屬性,且屬性值和頁面name屬性值一致,     2. 提供setXxx方法     ---- 接受少量資料 -------    &nb

struts2框架常量配置的方式

struts2框架常量配置的三種方式 1.在struts.xml中使用標籤: 這些常量可見struts2-core-x.x.x.jar核心包下的org.apache.struts2中的default.properties檔案 <!-- constant:配置常量

關於struts2開發Action獲取servletApi的方式

首先給大家說明一下servletApi:     相關servletApi也就是指的是request、response、session以及cookie等值作用域 Action訪問servletApi的三種方式:       通過

struts2獲取前臺傳遞過來的資料的方式

struts2獲取前臺傳遞過來的資料可以通過屬性驅動和模型驅動兩種方式獲得。 屬性驅動 1、使用變數的方式 前臺: action: action中要獲得前臺傳遞過來的account和password兩個引數的資料。那麼就必須在action中設定和前臺na

實現Servlet方式(與GenericServlet、HttpServlet的關係)

WEB伺服器可以存放資料,他是一個“容器”,作用是接收使用者的請求,再對這個請求做出相應。 Java的Web伺服器必須要支援JSP/Servlet(作為JSP/Servlet的容器)。 所以JSP/Servlet就是JavaWeb伺服器的一套規範。 所以要進行J