struts2中的Action在MVC模式中充當着Servlet的做用,struts2中的Action沒有與Servlet耦合,那麼在struts2中的Action是怎樣訪問ServletAPI(一般爲HttpServletRequest、HttpSession和ServletContext)的呢?服務器
方法一: strtus2提供了ActionContext類來訪問ServletAPI :ActionContext.getContext();來獲取ActionContext。session
其get("key")--Object;該方法相似於調用HttpServletRequest的getAttribute(「name」)方法; app
getApplication()--Map;該對象相似於ServletContext實列;對象
getParameters()--Map;相似於調用HttpServletRequest的getParameterMap()方法;接口
getSession()--Map;相似於HttpSession實列;get
setApplication(Map application)--void;傳入一個Map實列,將Map裏面的key-value轉換爲application的屬性值、屬性名。it
setSession(Map session)--void;傳入一個Map實列,將Map裏面的key-value轉換爲Session中的屬性值、屬性名。io
補充一點:Servlet中的HttpServletRequest、HttpSession和ServletContext分別對應JSP內置對象中的request、session、applction。struts2
方法二: 另外一種比較直接的方法就是Action實現對應的接口,ServletConextAware實現該接口後能夠直接訪問Web應用中的ServletContext實列;ServletRequestAware實現該接口後能夠直接訪問HttpServletRequest實列;ServletResponseAware實現該接口後可直接訪問HttpServletResponse實列;request
方法三:使用ServletActionContext類的ServletActionContext.getRequest()獲取 HttpServletRequest;ServletActionContext.getResponse()獲取HttpServletResponse;ServletActionContext.getServletContext()獲取ServletContext。
注意:雖然咱們能夠在Action中拿到HttpSerletResponse實列,可是沒法用該實列直接生成服務器響應,Action只控制業務;如response.getWriter().println("hello world")是錯誤的。