• Struts2:在 Action 中访问 WEB 资源


    1、什么是 WEB 资源?

     HttpServletRequest、HttpSession、ServletContext 等原生的 Servlet API。

    2、为什么访问 WEB 资源?

     B/S 的应用的 Controller 中必然需要访问 WEB 资源(向域对象中读写属性、读写Cookie、获取 realPath 等)

    3、如何访问?

    1)、和Servlet API 解耦的方式:只能访问有限的 Servlet API 对象,且只能访问有限的方法。(使用 ActionContext 、实现 XxxAware 接口)。

    2)、和  Servlet 耦合的方式:可以访问更多的 Servlet API 对象,可以调用其原生的方法。(使用 ServletActionContext、实现 ServletXxxAware 接口)。

    两者区别:若一个 Action 类中有多个 action 方法,且多个方法都需要使用域对象的Map 或 parameters ,则建议使用实现 XxxAware 接口的方式。

    具体分析:

    一、使用 ActionContext 对象来获取 WEB 资源:

    0、获取 ActionContext 对象

      //ActionContext 是 Action 的上下文对象。可以从中获取到当前 Action 需要的一切信息。

      ActionContext actionContext = ActionContext.getContext();

    1、获取 appliction 对应的 Map,并向其中添加一个属性

      //通过调用 ActionContext 对象的 getApplication() 方法来获取 application 对象的 Map 对象。

      Map<String, Object> applicationMap = actionContext.getApplication();

      //设置属性

      applicationMap.put("applicationKey","applicationValue");

      //获取属性

      applicationMap.get("date");

    2、session (可以进行属性的读写操作)

    注:session 对应的 Map 实际上是 SessionMap 类型的! 强转后若调用 invalidate() 方法,可以使其 session 失效。

      Map<String, Object> sessionMap = actionContext.getSession();

      sessionMap.put("sessionKey", "sessionValue");

    3、request * (可以进行属性的读写操作)

      ActionContext 中并没有提供 getRequest 方法来获取 request 对应的 Map,需要手工调用 get() 方法,传入 request 字符串来获取。

      Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request");

      requestMap.put("requestKey", "requestValue");

    4、获取请求参数对应的 Map,并获取指定的参数值。

    键:请求参数的名字。值:请求参数的值对应的字符串数组。

    注意:1、getParameters 的返回值为在 Map<String, Object>,而不是Map<String, String[]>.

       2、parameters 这个 Map 只能读,不能写入数据,如果写入,但不出错,但也不起作用。

    二、实现 XxxAware 接口

         Action 类通过可以实现某些特定的接口,让 Struts2 框架在运行时向 Action 实例注入 parameters、request、session 和 application 对应的 Map 对象。

    implements ApplicationAware, ParameterAware, RequestAware, SessionAware

    因为解耦的方式只能获取 Map,有的时候我们需要用到原生的 API。所以需要耦合的方式。

    一、使用 ServletActionContext 的方式:可以从中获取到当前 Action 对象需要的一切 Servlet API 相关的对象。

    常用的方法:

    1、获取 HttpServletRequest:ServletActionContext.getRequest();

    2、获取 HttpSession: ServletActionContext.getRequest().getSession();

    3、获取 ServletContext:ServletActionContext.getServletContext();

    二、实现 ServletXxxAware 接口的方式

    implements ServletRequestAware,  ServletContextAware, ServletResponseAware

    over。

  • 相关阅读:
    经典小程序源码及其下载地址
    基于cropper.js的图片上传和裁剪
    【组件】微信小程序input搜索框的实现
    如何打造个人技术影响力
    一位90后程序员的自述:如何从年薪3w到30w!
    状态模式(State)(开关灯,状态实例为类,不同状态,不同行为)
    责任链模式(Chain of Responsibility、Handler)(请求处理建立链)
    java中创建对象的五种方法
    PrintWrite
    观察者模式(Observer、Subject、ConcreteSubject、ConcreteObserver)(监护、订阅)
  • 原文地址:https://www.cnblogs.com/daoxiaobai/p/6555408.html
Copyright © 2020-2023  润新知