Struts2学习笔记(3)-如何访问Web资源

来源:互联网 发布:mysql不支持emoji表情 编辑:程序博客网 时间:2024/05/16 15:37

一、web资源是什么?

   web资源是HttpServletRequest、HttpSession、ServletContext等原生的Servlet API。

二、为什么要访问web资源?

    B/S的应用的controller中必然需要访问web资源,比如:向域对象中读写属性、读写Cookie、获取realPath等...

三、怎么访问web资源?

  访问web资源有两种方式:
  1. 和Servlet API解耦的方式:

        只能访问到有限的servlet API对象,而且只能访问到有限的方法(读取请求参数、访问域对象的属性、使session失效等...)

    (1)实现ActionContext

      为了避免与servlet API耦合在一起,方便Action做单元测试。  ActionContext是Action执行的上下文对象。  在ActionContext中保存了Action执行所需要的所有对象。  包括parameters、request、session、application等。 获取HttpServletRequest对应的Map对象:
       public Object get(Object key):ActionContext类中没有提供类似getRequest()这样的方法来获取HttpServletRequest对应的Map对象。要得到HttpServletRequest对应的Map对象,可以通过为get()方法传递“request”参数实现。
      获取HttpSession对应的Map对象:    public Map getSession();      获取ServletContext对应的Map对象: public Map getApplication();      获取请求参数对应的Map对象:         public Map getParameters();
  (2)实现XxxAware接口    Struts2提供了4种分别来访问ActionContext、Request、Response和Session对象的接口,  根据具体需要选择就可以了。4个接口如下:
        org.apache.struts2.interceptor.ApplicationAware        org.apache.struts2.interceptor.SessionAware        org.apache.struts2.interceptor.RequestAware        org.apache.struts2.interceptor.ParameterAware
  选用建议:若一个Action类中有多个action方法,且多个方法都需要使用域对象的Map或parameters,则建议使用Aware接口的方式。因为只要定义成员变量就可以了(不用在每个方法里获取)。      
  1. 和Servlet API耦合的方式:

       可以访问更多的servlet API对象,且可以调用其原生的方法。  在动作类里,可以通过ServletActionContext对象或通过实现Aware接口去访问Web资源。  实现Aware接口是依赖注入技术的一种实现,这也是推荐的方法,因为它将使你的动作类更容易测试。

    (1)实现ServletActionContext

ServletActionContext包括ActionContext,并且比ActionContext更容易使用。有以下方法:public static javax.servlet.http.HttpServletRequest getRequest(),返回当前HttpServletRequest对象;public static javax.servlet.http.HttpServletResponse getResponse(),返回当前HttpServletResponse对象;public static javax.servlet.ServletContext getServletContext(),返回ServletContext对象;   可以通过在HttpServletRequest对象上调用一个getSession方法的办法来获得HttpSession对象。如果使用了basicStack或defaultStack拦截器栈,HttpSession对象将被自动创建。    注意:不应该从动作类的构造器里调用ServletActionContext类的方法.    因为在这个阶段,底层的ActionContext对象还没有被传递给它。    从某个动作的构造器里调用ServletActionContext.getServletContext方法将返回空值;

(2)实现ServletXxxAware接口

      Struts2提供了4种分别来访问ServletContext、HttpServletRequest、HttpServletResponse和HttpSession对象的接口,根据具体选择即可。      4个接口如下:
           org.apache.struts2.util.ServletContextAware;           org.apache.struts2.interceptor.ServletRequestAware;           org.apache.struts2.interceptor.ServletReponseAware;           org.apache.struts2.interceptor.SessionAware;
阅读全文
0 0
原创粉丝点击