在struts2的action中有时会需要访问request,session以及applicationContext等web资源,这里我总结了四种可行的方法,供读者参考。
(1)使用ActionContext
<pre name="code" class="java"><pre name="code" class="html">package com.jiajia.actions;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
public class TestActionContext {
public String execute(){
//获取actionContext对象
ActionContext context = ActionContext.getContext();
//ActionContext中获取的application是一个Map,里面可以存储需要的参数。
Map<String, Object> application = context.getApplication();
//在application中放置一个参数applicationAttr
application.put("applicationAttr",
"通过ActionContext的getApplication()方法获取application");
//ActionContext中获取的session也是一个Map
Map<String, Object> session = context.getSession();
//在session中放置一个参数
session.put("sessionAttr",
"通过ActionContext的getSession()方法获取session");
//ActionContext中获取的request也是一个Map,但获取方法有别于session和application
//ActionContext中并没有getRequest()方法(我还不理解为什么会这样)
Map<String, Object> request = (Map<String, Object>) context.get("request");
//在request中放置一个参数
request.put("requestAttr",
"通过ActionContext的get(\"request\")方法获取request");
return "success";
}
}
(2)使用ServletActionContext
<pre name="code" class="java">package com.jiajia.actions;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
/**
* @author jiajia
* 该类主要用来测试通过ServletActionContext类来
* 直接获取request、session以及application的方法
*/
public class TestServletActionContext {
public String execute(){
ServletContext application = ServletActionContext.getServletContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
//在application中放置一个参数applicationAttr
application.setAttribute("applicationAttr",
"通过ServletActionContext.getServletContext()获取application");
//在session中放置一个参数
session.setAttribute("sessionAttr",
"通过ServletActionContext.getRequest().getSession()获取session");
//在request中放置一个参数
request.setAttribute("requestAttr",
"通过ServletActionContext.getRequest()获取request");
return "success";
}
}
(3)实现RequestAware, SessionAware, ApplicationAware接口
package com.jiajia.actions;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
/**
* @author jiajia
* 该类主要用来测试通过实现RequestAware, SessionAware, ApplicationAware接口,struts会自动向
* 对象中注入Map类型的application、session、以及request属性
*/
public class TestAware implements RequestAware, SessionAware, ApplicationAware{
Map<String, Object> application;
Map<String, Object> session;
Map<String, Object> request;
@Override
public void setApplication(Map<String, Object> arg0) {
this.application = arg0;
}
@Override
public void setSession(Map<String, Object> arg0) {
this.session = arg0;
}
@Override
public void setRequest(Map<String, Object> arg0) {
this.request = arg0;
}
public String execute(){
//在application中放置一个参数applicationAttr
application.put("applicationAttr",
"通过实现ApplicationAware接口获取application");
//在session中放置一个参数
session.put("sessionAttr",
"通过实现SessionAware接口获取session");
//在request中放置一个参数
request.put("requestAttr",
"通过实现RequestAware接口获取request");
return "success";
}
}
(4)实现ServletRequestAware, ServletContextAware接口
package com.jiajia.actions;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
public class TestServletAware implements ServletRequestAware,
ServletContextAware {
ServletContext application;
HttpServletRequest request;
HttpSession session;
@Override
public void setServletContext(ServletContext arg0) {
this.application = arg0;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
}
public String execute(){
session = request.getSession();
//在application中放置一个参数applicationAttr
application.setAttribute("applicationAttr",
"通过实现ServletContextAware接口获取application");
//在session中放置一个参数
session.setAttribute("sessionAttr",
"通过实现ServletRequestAware接口获取request再调用getSession()获取session");
//在request中放置一个参数
request.setAttribute("requestAttr",
"通过实现ServletRequestAware接口获取request");
return "success";
}
}
上述四种方法中(1)和(3)与原始Servlet API是没有耦合的,但功能也相对较弱,(2)和(4)与原始Servlet API是紧密耦合的,可以提供完整的servlet中的功能
完整示例代码: http://download.csdn.net/detail/jiajia333666/9050793