方式一、实现特定的接口
ServletContext需要实现:ServletContextAware
HttpServletRequest需要实现:ServletRequestAware
HttpServletResponse需要实现:ServletResponseAware
/*
不推荐,麻烦,非IOC方式,与Servlet API耦合大
*/
public class MyAction implements ServletRequestAware,ServletResponseAware,ServletContextAware{
HttpServletRequest request;
HttpServletResponse response;
ServletContext application;
@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletContext(ServletContext context) {
this.application = context;
}
}
方式二、ActionContext工具类获取
/*
通过ActionContext工具类: 完全和ServletAPI不耦合
一般推荐使用,IOC方式,只能获得request,而response则得不到
下面是ActionContext类中包含的几个常用方法。
1、public Object get(Object key):取得HttpServletRequest中key的值;
2、void put(String key,Object value):设置HttpServletRequest中key的值为value;
3、public Map getApplication():获取封装了ServletContext的Map对象;
4、void setApplication(Map application):设置ServletContext实例;
5、static ActionContext getContext():静态方法,获取系统的ActionContext实例;
6、Map getParameters():类似于HttpServletRequest中的getParametersMap方法;
7、public Map getSession():获取封装了HttpSession的Map对象;
8、void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换为session的属性名和属性值;
*/
//获取ActionContext对象
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> request = (Map<String, Object>) actionContext.get("request");
Map<String, Object> session = actionContext.getSession();
Map<String, Object> application = actionContext.getApplication();
方式三、ServletActionContext工具类获取
/*
通过ServletActionContext工具类: 和ServletAPI耦合严重
如果用参数来接收, 依然和ServletAPI有耦合, 直接用使用则不耦合。推荐使用
*/
ServletActionContext.getRequest().getSession();
ServletActionContext.getResponse();
ServletActionContext.getServletContext();
当然,怎么选择具体还是看根据自己来确定~~~~~~~~~