zoukankan      html  css  js  c++  java
  • Struts 2读书笔记Action访问Servlet API

          Action访问Servlet API   

          Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试。

          对于Web应用的控制器而言,不访问ServletAPI是几乎不可能的。Web应用中通常需要访问的ServletAPI就是HttpServletRequest、HttpSession和ServletContext,这三个接口分别代表JSP中内置对象中的request、session、application。

          Struts 2提供了一个ActionContext类,Struts 2的action可以通过该类来访问Servlet API

          ActionContext类提供了一个静态方法getContext(),该方法返回一个ActionContext的实例。该实例提供了一些访问Servlet API的方法。     

    方法名

    功能描述

    getContext()

    静态方法,获取系统的ActionContext实例

    getSession()

    返回一个Map对象,该对象存入HttpSession实例。

    setSession(Map session)

    直接传入一个Map实例,将该map实例总得key、value对应转换成session的属性名、属性值

    getApplication()

    返回一个Map对象,该对象存入ServletContext实例

    setApplication()

    直接传入一个Map实例,将实例中的key、value对应转换成application的属性名、属性值

    getParameters()

    获得所有请求参数。类似于调用HttpServletRequest对象的getParameterMap方法

          ActionContext将在Action类中通过ActionContext访问Servlet API,该Action中示范了向request、session、application范围设置属性值。         

    1     ActionContext ctx = ActionContext.getContext(); 
    2   
    3     //获得Session 
    4     Map session = ctx.getSession(); 
    5   
    6     //获得Application 
    7     Map application = ctx.getApplication();

          struts 2即可以彻底与Servlet API 分离,从而可以允许该脱离Web容器运行,也就可以脱离Web容器来测试Action;又允许用简单的方式来操作request、session、application范围的属性。

     

          Action 直接访问Servlet API

          虽然Struts 2 提供了ActionContext来访问Servlet API,但这种访问毕竟不是直接获得Servlet API的实例。Struts 2 提供了几种接口,Action可以直接访问Servlet API

     

    实现接口名称

    接口描述

    ServletContextAware

    实现该接口的Action可以直接访问Web应用的ServletContext实例

    ServletRequestAware

    实现该接口的Action可以直接访问用户请求的HttpServletRequest实例

    ServletResponseAware

    实现该接口的Action可以直接访问服务器响应的HttpServletResponse

     
    1         private HttpServletResponse response;
    2     //重写实现ServletResponseAware接口
    3     public void setServletResponse(HttpServletResponse response) {
    4         this.response = response;
    5         
    6     }

          通过上面可知,实现ServletResponseAware接口,只需要实现如下方法:     

    1  public void setServletResponse(HttpServletResponse response);

          类似的,如果一个Action实现了ServletRequestAware,则需要实现如下方法:        

    1 public void setServletRequest(HttpServletRequest request);

          类似的,如果一个Action实现了ServletContextAware,则需要实现如下方法:       

    1 public void setServletContext(ServletContext  context);

          即使我们在struts 2 的Action类中获得了httpServletRespose对象,也不要尝试直接在Action中对客户端生成响应。

            

          使用ServletActionContext访问Servlet API

          为了能够直接访问Servlet API,struts 2 还提供了一个ServletAction工具类,这个类包含了如下几个静态方法

    返回值

    方法名

    功能描述

    HttpServletRequest

    getRequest()

    获得Web应用的HttpServletRequest对象

    HttpServletResponse

    getResponse()

    获得Web应用的HttpservletResponse对象

    ServletContext

    getServletContext()

    获得Web应用的ServletContext对象

    PageContext

    getServletContext()

    获得Web应用的ServletContext对象

     

          借助于ServletActionContext工具类的帮助,Action能以更加简单的方式来访问Servlet API。

          

          读李刚《轻量级java EE企业应用实战》 

     

     

     

     

     

     

    PS:如果你觉得文章对你有所帮助,别忘了推荐或者分享,因为有你的支持,才是我续写下篇的动力和源泉!
  • 相关阅读:
    体检套餐管理系统
    Altium Designer9.4局域网内冲突的问题
    关于ARM Linux下的SD卡及U盘的挂载问题
    mkimage command not found – U-Boot images will not be built
    Xilinx------BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
    linux文件压缩解压命令
    VIVADO 入门之仿真与逻辑分析仪使用
    Linux自动运行应用程序
    ZYNQ学习之二-EMIO
    inux grep 命令 搜索含有"zynq"字符的文件
  • 原文地址:https://www.cnblogs.com/chenssy/p/2589702.html
Copyright © 2011-2022 走看看