ServletAPI的获取

时间:2024-09-24 21:36:51

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类了)

  

 package com.bjyinfu.struts.actions;

 import java.util.Map;

 import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; public class GetServletAPIAction implements RequestAware,SessionAware,ApplicationAware { private Map<String,Object> req;
private Map<String,Object> app;
private Map<String,Object> ses; public String execute(){
req.put("servletReq", 13);
ses.put("servletSes", 15);
app.put("servletApp", 17); return "servlet";
} @Override
public void setRequest(Map<String, Object> request) {
this.req = request;
} @Override
public void setApplication(Map<String, Object> application) {
this.app = application;
} @Override
public void setSession(Map<String, Object> session) {
this.ses = session;
}
}

  (通过此处了解到,成员变量和属性不是同一个东西,属性是setter或者getter方法将,set或者get去掉并将首字母改成小写,这是属性名)