国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - Struts2訪問Servlet的三種方式

Struts2訪問Servlet的三種方式

2020-11-03 22:55Switch_vov JAVA教程

這篇文章主要介紹了Struts2訪問Servlet的三種方式,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

基本介紹

Struts2中,Action并沒有直接和Servlet API耦合。雖然Struts2 中的Action訪問Servlet API麻煩一些,但是這卻是Struts2中Action的重要改良之一,方便Action進行單元測試。

盡管Action和Servlet API解耦會帶來很多好處,然而在Action中完全不訪問Servlet API幾乎是不可能的,在實現業務邏輯時,經常要訪問Servlet中的對象,如request、session和application等 。

在Struts2中,訪問Servlet API有3種方法,分別是實現特定接口,通過ServletActionContext類,通過ActionContext類。

思維導圖

Struts2訪問Servlet的三種方式

實現特定接口訪問

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
 *
 * org.apache.struts2.dispatcher.StrutsRequestWrapper@461aa2
 * org.apache.catalina.connector.ResponseFacade@7e83df
 * org.apache.catalina.core.ApplicationContextFacade@3b102
 * org.apache.catalina.session.StandardSessionFacade@5a214b
 * 是由一個名稱為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類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
 *
 * 有一個需要注意的問題:
 *    org.apache.struts2.dispatcher.StrutsRequestWrapper@4637b3
 *    org.apache.catalina.connector.ResponseFacade@1f2f2f7
 *    org.apache.catalina.session.StandardSessionFacade@12d77c1
 *    org.apache.catalina.core.ApplicationContextFacade@1133ff
 *
 *    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類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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());
    /*org.apache.struts2.dispatcher.StrutsRequestWrapper@112e422
    org.apache.catalina.connector.ResponseFacade@13f8b4c
    org.apache.catalina.core.ApplicationContextFacade@d244dd
    org.apache.catalina.session.StandardSessionFacade@a711cb*/
 
    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的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/q547550831/article/details/53324983

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲人免费 | 亚洲欧美视频 | 国产在线观 | 精品久久久av | 日日摸夜夜 | 欧美成人午夜 | 91精品国产综合久久久久久漫画 | 色综合久久久 | 久久精品久久久久电影 | www.色婷婷 | 高清av一区 | 欧美激情视频一区二区三区在线播放 | 中文字幕一区二区三区四区 | 日韩av一区二区在线观看 | 国产成人精品一区二区三区 | 欧美激情国产日韩精品一区18 | 日本不卡高字幕在线2019 | 日本一区视频 | 国产亚洲欧美另类一区二区三区 | 久久亚洲国产精品 | 日韩欧美国产精品 | 最近免费中文字幕在线视频2 | 日韩av在线中文字幕 | 欧美透逼视频 | 日韩三级黄色片 | 一级a毛片 | 久草美女 | 久久视频国产 | 免费午夜视频 | 中文字幕av一区二区三区免费看 | 日韩欧美一区二区三区在线观看 | 高清一区二区三区视频 | 毛片国产 | 亚洲福利一区 | aaa在线免费观看 | 青青草视频在线免费观看 | 欧洲精品一区 | 一级全黄少妇性色生活片免费 | 综合婷婷 | 午夜成人在线视频 | 国产亚洲精品一区二区 |