激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

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

Struts2訪問Servlet的三種方式

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

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

基本介紹

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

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

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

思維導圖

Struts2訪問Servlet的三種方式

實現(xiàn)特定接口訪問

?
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
 * 它里面提供了對應的靜態(tài)方法,可以直接獲取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對象已經(jīng)不是原來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(); 獲取的是請求參數(shù)
 */
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域中存入數(shù)據(jù)
   * 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();
    //存入數(shù)據(jù)
    session.setAttribute("sessionAttr", "hello session attr");
    session.getId();
    //2.獲取ServletContext
    ServletContext application = ServletActionContext.getServletContext();
    application.getRealPath("/WEB-INF/uploads");
    //存入數(shù)據(jù)
    application.setAttribute("applicationAttr", "hello application attr");
    return SUCCESS;
  }
 
 
  /**
   * 使用ActionContext類中的getSession()和getApplication()獲取到的map來往map中存入數(shù)據(jù)
   * 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)
通過參數(shù)key來查找當前ActionContext中的值。
Map<String, Object> getApplication()
返回一個Application級的Map對象。
static ActionContext getContext()
獲取當前線程的ActionContext對象。
Map<String, Object> getParameters()
返回一個包含所有HttpServletRequest參數(shù)信息的Map對象。
Map<String, Object> getSession()
返回一個Map類型的HttpSession對象。
void setApplication(Map<String, Object> application)
 設(shè)置Application上下文。
void setSession(Map<String, Object> session)
設(shè)置一個Map類型的Session值 。

 

PS:通過對這三種方式的使用,可以發(fā)現(xiàn)通過實現(xiàn)特定接口和使用ServletActionContext類,Action是與Servlet API進行直接耦合的,這樣并不利于程序解耦。所以開發(fā)中建議優(yōu)先使用ActionContext。

PS:雖然這樣,在控制器與Servlet API解耦了,但是在Struts2中肯定有一部分代碼還是和Servlet API有耦合,這是毋庸置疑的。如果我們只是需要使用Servlet API中域?qū)ο笾械挠颍ㄦI值對,存放數(shù)據(jù)的),那么就使用ServletContext,如果需要使用除了域之外的其他東西,那么還是要使用ServletActionContext的。

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天天干导航 | 性少妇videosexfreexxx片 | 久久久久久久免费看 | 久久久三区 | 一级α片免费看 | 国产一级午夜 | 97香蕉超级碰碰久久免费软件 | 操操操操操 | 亚洲欧美国产精品va在线观看 | 黄色免费av| 久久狠狠高潮亚洲精品 | 欧产日产国产精品v | free japan xxxxhdsex69 | 亚洲午夜一区二区三区 | 欧美成年视频 | 久久久久99一区二区三区 | 黄色毛片a级 | 中文字幕在线播放不卡 | 欧美性生视频 | 九草av | 久久αv | 日本精品久久久一区二区三区 | 国产免费片 | h视频在线免费观看 | 中文字幕网址 | 日本aaaa片毛片免费观看视频 | 91看片免费看 | 国产高潮失禁喷水爽到抽搐视频 | 爱射av | 97超级碰碰人国产在线观看 | 国产精品久久久久久久四虎电影 | 欧美1区2区在线观看 | 国产精品亚洲激情 | 久久免费看片 | 国产免费让你躁在线视频 | 欧美日韩一区三区 | av在线更新 | 欧美一级片网站 | 一级黄色播放 | 一级做a爰性色毛片免费 | 成人区一区二区 |