Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不再与Servlet API耦合,能更轻松的测试该Action。但如何访问?

Web应用中通常需要访问的Servlet API就是HttpServletRequest、HttpSession、ServletContext这3个类,分别代表JSP内置对象中的request、session、application。

方法一:(一般推荐使用,IOC方式,只能获得request,而response则得不到)

Struts2提供了ActionContext类,通过ActionContext类访问Servlet API。

下面是ActionContext类中包含的几个常用方法。

1、public Object get(Object key):取得HttpServletRequest中key的值;

2、void put(String key,Object value):设置HttpServletRequest中key的值为value;

3、public Map getApplication():获取封装了ServletContext的Map对象;

4、void setApplication(Map application):设置ServletContext实例;

5、static ActionContext getContext():静态方法,获取系统的ActionContext实例;

6、Map getParameters():类似于HttpServletRequest中的getParametersMap方法;

7、public Map getSession():获取封装了HttpSession的Map对象;

8、void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换为session的属性名和属性值;

方法二:(不推荐,麻烦,非IOC方式,与Servlet API耦合大)

虽然Struts2提供了ActionContext来访问Servlet API,但这种访问不能直接获得Servlet API,为了在Action中直接访问Servlet API,Struts2还提供了以下接口。

1、ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例;

2、ServletRequestAware:实现该接口的Action可以直接访问用户请求对象的HttpServletRequest的实例;

3、ServletResponseAware:实现该接口的Action可以直接访问服务器响应的HttpServletResponse的实例;

方法三:(非IOC方式,强烈推荐使用)

Struts2还提供了一个ServletActionContext,其静态方法有:getPageContext()、getRequest() 、getResponse()、getServletContext()。

1、HttpServletRequest request=ServletActionContext.getRequest();

2、HttpServletResponse response=ServletActionContext.getResponse();

3、request.getSession().setAttribute("username","admin");

4、request.setAttribute("password","123456");

Struts2中Action访问Servlet API的三种方法相关推荐

  1. Action访问Servlet API的三种方法

    一.为什么要访问Servlet API ? Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试.但是对于Web控制器 ...

  2. 在HTML中使用CSS美化网页的三种方法

    在HTML中使用CSS美化网页的三种方法 CSS是Cascading Style Sheets(级联样式表)的缩写,CSS是一种样式表语言,用于为HTML文档定义布局.例如,CSS涉及字体.颜色.边距 ...

  3. Opencv3编程入门学习笔记(三)之访问图像像素的三种方法

    访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...

  4. android启动其他app的服务器,Android中通过外部程序启动App的三种方法

    这篇文章主要介绍了Android中通过外部程序启动App的三种方法, 本文讲解了直接通过包名. 通过自定义的Action. 通过Scheme三种方法,并分别给出操作代码,需要的朋友可以参考下 ==== ...

  5. js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法

    本文为大家分享了在网页中JS函数自动执行常用方法,供大家参考,具体内容如下 一.JS方法 1.最简单的调用方式,直接写到html的body标签里面: 2.在JS语句调用: function myfun ...

  6. ABAP中创建动态内表的三种方法(转载)

    BAP中创建动态内表的三种方法 第一种: 如果我们需要的动态内表字段或者动态工作区和数据字典中的类型一致,可以直接使用CREATE DATA生成,当然也可以是自定义类型. 比如要产生和数据表MARA结 ...

  7. vbs执行ctrl+空格_VBS中解决路径带空格的三种方法

    vbs中,如果需要运行的程序中带有空格,按照通常的方式往往会提示错误,其实有两种形式不同的解决方法: 在应用程序前后分别加三个双引号,代码如下: Set wshell=CreateObject(&qu ...

  8. 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()

    1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler.RunOnUiThread.控件.post() 2.1 Handler (1)定 ...

  9. Unity3D中的SendMessage使用(消息传递的三种方法)

    转载自 Unity3D中的SendMessage使用(消息传递的三种方法) 0 概述 Unity提供的消息推送机制可以非常方便我们的脚本开发,它实现的是一种 伪监听者模式,利用的是反射机制. 1 常用 ...

最新文章

  1. 【美国】谷歌重返机器人背后有何深意?
  2. Python实现单链表
  3. Unix编程艺术——Unix哲学
  4. 【深度学习】CornerNet: 将目标检测问题视作关键点检测与配对
  5. 【python自动化办公03】word操作-文档内容替换
  6. 给APK签名,修改签名
  7. 可在单片机上运行的简易图形库
  8. java system.load()_System.load()与System.loadLibrary()
  9. jQuery实现轮播图--入门
  10. 探索软件设计模式(二)
  11. 什么是管理大数据技术
  12. bay——RAC_ASM ORA-15001 diskgroup DATA does not exist or is not mounted.docx
  13. 001 红黑树(二)之 C语言的实现(3)
  14. .exe文件打开闪退
  15. int型的取值范围是?
  16. CMMI2.0是什么?
  17. MYSQL 2059问题的解决
  18. 山东三诚智慧农业科技有限公司到安徽农业大学工学院洽谈产学研合作
  19. 梅科尔工作室—罗森—鸿蒙笔记4
  20. 阿丹学理财之黄金投资

热门文章

  1. 【BLE MIDI】MIDI 文件格式分析 ( FF 03 轨道名称 | FF 51 03 四分音符时长 )
  2. 【Java 虚拟机原理】Dalvik 虚拟机 ( 简介 | CPU 指令集 | Dalvik 虚拟机内存 )
  3. 【Flutter】ListView 列表高级功能 ( ScrollController 上拉加载更多 )
  4. 【设计模式】软件设计七大原则 ( 开闭原则 )
  5. 【错误记录】Android Studio 编译报错 ( Gradle 下载错误导致 Failed to open zip file 报错 )
  6. 自动化测试中,测试数据如何管理?
  7. 用Jquery控制文本框只能输入数字和字母及jquery自定义方法$.fn
  8. 数组作为函数参数进行传递
  9. oracle编程艺术笔记1
  10. JS--切换图片总结