与Servlet API解耦

为了降低与Servlet API的耦合,Struts2构造map对象来代替Servlet对象,包括HttpServletRequest、HttpSession、ServletContext,在Action中可直接使用Servlet对象对应的map对象来存储数据。

通常Struts2有两种方式访问Servlet对象:

方式一:借助于ServletActionContext对象,直接获取

1、ActionContext是Action执行上下文环境,每个上下文基本上都是一个对象容器,包含了动作执行所需的对象。
2、ActionContext是Thread Local的,存放在每个线程中的值唯一,线程安全。
3、ServletActionContext直接集成自ActionContext,提供了与Servlet对象的直接访问,可直接获取Servlet对象。

//获取HttpServletRequest对象
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("key", "value");//向request域中添加数据
//获取HttpServletResponse对象
HttpServletResponse response=ServletActionContext.getResponse();
response.getWriter();//获取文本输出流
//获取Servlet上下文对象
ServletContext context =ServletActionContext.getServletContext();
//获取PageContext对象
PageContext pageContext =ServletActionContext.getPageContext();

//通过PageContext对象获得ServletRequest对象
ServletRequest servletRequest = pageContext.getRequest();
ServletResponse servletResponse = pageContext.getResponse();
ServletConfig servletConfig = pageContext.getServletConfig();
pageContext.getServletContext();
HttpSession session = pageContext.getSession();

ActionContext与ServletActionContext比较
1、ActionContext主要负责对值的操作,ServletActionContext主要用于获取Servlet对象。
2、优先使用ActionContext,只有ActionContxt不能满足功能要求时才使用ServletActionContext,尽量使Action与Web无关。
3、使用ActionContext时,不要在Action的构造函数里使用ActionContext.getContext()。

方式二:实现指定的接口,由struts2框架运行时注入

1、实现Aware接口利用了依赖注入的方式能够让应用程序有更好的重用性。
2、Struts2提供了4种分别用来访问ServletContext、HttpServletRequest、HttpServletResponse、HttpSession对象的接口

org.apache.struts2.util.ServletContextAware;
org.apache.struts2.interceptor.ServletRequestAware;
org.apache.struts2.interceptor.ServletResponseAware;
org.apache.struts2.interceptor.SessionAware;

举例:

import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class ActionTest extends ActionSupport implements ServletRequestAware {
    private HttpServletRequest request = null;

    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    public String execute() {
        request.setAttribute("request", "Request的属性值");
        request.getSession().setAttribute("sessionTestKey", "测试SessionAware");
        return this.SUCCESS;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值