Action中获取ServletAPI,三种方式
(1)通过ActionContext获取(只是获取并操作了域空间,并不是真正的ServletAPI对象)
在struts2框架中,通过Action的执行上下文类ActionContext,可以获取request/session/application对象。
ActionContext ctx = ActionContext.getContext();
Map<String,Object> application = ctx.getApplication();
Map<String,Object> session= ctx.getSession();
ActionContext对象本身就是request的储存空间,直接向context中存入数据就可以认为向request中存入数据
例:向request域空间中放入数据
ActionContext.getContext().put("request","value");
在jsp页面中进行取值${requestScope.request }El表达式
向Session域空间中放入数据
ActionContext.getContext().getSession().put("session","value");
在jsp页面中进行取值${sessionScope.session }El表达式
向Application(application 其实就是ServletContext)域空间中放入数据
ActionContext.getContext().getApplication().put("application","value");
在jsp页面中进行取值${applicationScope.application}El表达式
(以上方法获取不到response)
(2)通过ServletActionContext获取真正的servletAPI对象
例:向request对象中放入数据:
HttpServletRequest req = ServletActionContext.getRequest(); //得到request对象
req.setAttribute("request","value");
向Session对象中放入数据:
req.getSession().setAttribute("session","value");
向Application对象中放入数据:
ServletActionContext.g.getServletContext().setAttribute("app", "value");
(jsp页面展示数据的时候通第一种方式是相同的)
(3)通过实现特定借口来获取(1:比较麻烦。2:Action方法被污染了,不是单纯的pojo类了)
1 package com.bjyinfu.struts.actions; 2 3 import java.util.Map; 4 5 import org.apache.struts2.ServletActionContext; 6 import org.apache.struts2.interceptor.ApplicationAware; 7 import org.apache.struts2.interceptor.RequestAware; 8 import org.apache.struts2.interceptor.SessionAware; 9 10 public class GetServletAPIAction implements RequestAware,SessionAware,ApplicationAware { 11 12 private Map<String,Object> req; 13 private Map<String,Object> app; 14 private Map<String,Object> ses; 15 16 public String execute(){ 17 req.put("servletReq", 13); 18 ses.put("servletSes", 15); 19 app.put("servletApp", 17); 20 21 return "servlet"; 22 } 23 24 @Override 25 public void setRequest(Map<String, Object> request) { 26 this.req = request; 27 } 28 29 @Override 30 public void setApplication(Map<String, Object> application) { 31 this.app = application; 32 } 33 34 @Override 35 public void setSession(Map<String, Object> session) { 36 this.ses = session; 37 } 38 }
(通过此处了解到,成员变量和属性不是同一个东西,属性是setter或者getter方法将,set或者get去掉并将首字母改成小写,这是属性名)