在struts2中,访问servlet API有三种方式,分别是实现特定接口,通过ServletActionContext类,通过ActionContext类。
1. 实现特定接口(接口注入方式)
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;
public class ParamAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware,ServletContextAware{
private HttpServletRequest request;
private HttpServletResponse response;
private ServletContext application;
//此种注入方式线程安全
@Override
public void setServletContext(ServletContext arg0) {
// TODO Auto-generated method stub
this.application = arg0;
}
@Override
public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
this.response = arg0;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
this.request = arg0;
}
}
2.通过ServletActionContext访问(使用原生的方式获得)
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;
public class ServletApiTest extends ActionSupport{
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";
}
}
3. 通过ActionContext类访问(完全解耦合方式)
public class ServletApiTest2 extends ActionSupport{
public String demo() {
ActionContext context = ActionContext.getContext();
//1.获取前台值
Map<String, Object> map = context.getParameters();
//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");
//4.request域
context.put("requestAttr", "request域");
return "success";
}
}
在使用时具体使用哪种方法根据个人情况而定,本人喜欢第三种方法。。。