我们需要获取 Web 资源 request、response、session、application 对象的时候,可以通过 Struts 2 的拦截器或静态内置对象获取、并使用对象完成业务
推荐使用最后一种方法,即使用Struts2内置静态对象ServletActionContext
1. 拦截器获取Web资源模式
1.1 使用Struts2 Aware 拦截器
//实现以下三个接口可获取request、response和application对象,session对象通过request.getSession()获取。
//org.apache.struts2.interceptor.ServletRequestAware
//org.apache.struts2.interceptor.ServletResponseAware
//org.apache.struts2.interceptor.ServletContextAware
public class FirstAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware {
private ServletRequest request;
private ServletResponse response;
private ServletContext application;
@Override
public String execute() throws Exception {
String username = request.getParameter("username");
System.out.println(username);
return "success";
}
public void setServletRequest(HttpServletRequest arg0) {
request = arg0;
}
public void setServletResponse(HttpServletResponse arg0) {
response = arg0;
}
public void setServletContext(ServletContext arg0) {
application = arg0;
}
}
1.2 使用Strust2 RequestAware拦截器
//实现该接口即可获取全部web资源
//org.apache.struts2.interceptor.RequestAware
public class SecondAction extends ActionSupport implements RequestAware{
private ServletRequest request;
private ServletResponse response;
private ServletContext application;
@Override
public String execute() throws Exception {
String username = request.getParameter("username");
System.out.println("第二个action "+username);
return "success";
}
public void setRequest(Map<String, Object> arg0) {
request = (ServletRequest)arg0.get(StrutsStatics.HTTP_REQUEST);
response = (ServletResponse)arg0.get(StrutsStatics.HTTP_RESPONSE);
application= (ServletContext)arg0.get(StrutsStatics.SERVLET_CONTEXT);
}
}
2. 静态对象获取Web资源模式
2.1 使用Struts2内置静态对象ActionContext
public class ThirdAction extends ActionSupport {
@Override
public String execute() throws Exception {
ActionContext ac = ActionContext.getContext();
ServletRequest request = (ServletRequest)ac.get(ServletActionContext.HTTP_REQUEST);
ServletResponse response = (ServletResponse)ac.get(ServletActionContext.HTTP_RESPONSE);
ServletContext application = (ServletContext)ac.get(ServletActionContext.SERVLET_CONTEXT);
return "success";
}
}
2.2 使用Struts2内置静态对象ServletActionContext
public class FourthAction extends ActionSupport {
@Override
public String execute() throws Exception {
ServletRequest request = ServletActionContext.getRequest();
ServletResponse response = ServletActionContext.getResponse();
ServletContext application = ServletActionContext.getServletContext();
return "success";
}
}