在struts2中訪问servletAPI,通俗点也就是使用servlet中的两个对象request对象和response对象。

前几天看到一个CRM项目的源代码,里面使用request对象和response对象方式和我曾经使用的方式有点不同,于是便上网查询一些相关资料。特此记录于此,有兴趣的也能够參考參考。

  • 以往使用struts2往网页填充数据通常採用往值栈存放数据。也就是ActionContext.getContext().****();后面的方法类似与request对象和response对象的方法。
  • 这几天看到的是实现接口ServletRequestAware,ServletResponseAware。通过这两个接口实现两个方法setServletResponse(HttpServletResponse response)与setServletRequest(HttpServletRequest request)。然后訪问用户请求的HttpServletRequest实例与server响应的HttpServletResponse实例。
  • 进过上网查找另一种ServletActionContext。这个类直接继承了ActionContext。

接下来介绍一下ActionContext和ServletActionContext各自的方法:

  1. ActionContext:

    • Object get(Object key):该方法类似于调用HttpServletRequest的getAttribute(String name)方法;
    • Map getApplication():返回一个Map对象。该对象模拟了该应用的ServletContext实例。
    • static ActionContext getContext():静态方法,获取系统的ActionContext实例;
    • Map getParameters():获取全部的请求參数。

      类似于调用HttpServletRequest对象的getParameterMap方法;

    • Map getSession():返回一个Map对象,该Map对象模拟了HttpSession实例。
    • void setApplication(Map application):直接传入一个Map实例,将该Map实例里的key-value对转换成application的属性名。属性值;
    • void setSession(Map session):直接传入一个Map实例。将该Map实例里的key-value对转换成session的属性名。属性值
  1. ServletActionContext

    • static PageContext getPageContext():取得Web应用的PageContext对象;
      • static HttpServletRequest getRequest():取得web应用的HttpServletRequest对象;
      • static HttpServletResponse getResponse():取得web应用的HttpServletResponse对象;
      • static ServletContext getServletContext():取得web应用的ServletContext对象;

那么这几种方式有什么差别呢?原来使用ActionContext和ServletActionContext这两个类是属于非IOC方式来訪问request对象和response对象。而Action实现ServletRequestAware和ServletResponseAware接口是属于IOC方式的。关于IOC请点击这里。

我贴上代码来看看吧。

ServletRequestAware,ServletResponseAware

package cn.crm.web.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;import com.opensymphony.xwork2.ActionSupport;public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware{protected HttpServletRequest request;protected HttpServletResponse response;@Overridepublic void setServletResponse(HttpServletResponse response) {// TODO Auto-generated method stubthis.response=response;}@Overridepublic void setServletRequest(HttpServletRequest request) {// TODO Auto-generated method stubthis.request=request;}}

ActionContext

ActionContext context = ActionContext.getContext();
Map params = context.getParameters();
String username = (String) params.get("username");

ServletActionContext

HttpServletRequest request = ServletActionContext. getRequest();
HttpSession session = ServletActionContext. getRequest().getSession();

转载于:https://www.cnblogs.com/bhlsheji/p/5076747.html

在struts2中訪问servletAPI相关推荐

  1. Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录

    真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨 ...

  2. 宿主机訪问virtualBox中Ubuntu

    斌斌 (给我写信) 原创博文(http://blog.csdn.net/binbinxyz).转载请注明出处! 使用NAT模式.就是让虚拟系统借助NAT(网络地址转换)功能.不须要你进行不论什么其它的 ...

  3. 嵌套SQL语句訪问DB2中SQLCA的调用技巧

    在IBM的关系型数据库产品DB2中,使用SQL Communication Area(SQLCA)将程序中嵌套的SQL语句执行情况返回给程序. 在程序中有针对性地对SQLCA实施调用,可对程序中各类S ...

  4. Java中怎么控制线程訪问资源的数量

    在API中是这样来描写叙述Semaphore 的 Semaphore 通经常使用于限制能够訪问某些资源(物理或逻辑的)的线程数目. 一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可 ...

  5. 使用WinINet和WinHTTP实现Http訪问

    使用WinINet和WinHTTP实现Http訪问 飘飘白云 l_zhaohui@163.com 2007-11-30 Http訪问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用 ...

  6. 实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序

    Q 在NT/2000/XP中,我想用VC编写应用程序訪问硬件设备,如获取磁盘參数.读写绝对扇区数据.測试光驱实际速度等,该从哪里入手呢? A 在NT/2000/XP中,应用程序能够通过API函数Dev ...

  7. 使用c#訪问Access数据库时,提示找不到可安装的 ISAM

    使用c#訪问Access数据库时,提示找不到可安装的 ISAM.例如以下图: 代码例如以下: connectionString = "Provider=Microsoft.Jet.OLEDB ...

  8. HDFS简单介绍及用C语言訪问HDFS接口操作实践

    一.概述 近年来,大数据技术如火如荼,怎样存储海量数据也成了当今的热点和难点问题,而HDFS分布式文件系统作为Hadoop项目的分布式存储基础,也为HBASE提供数据持久化功能,它在大数据项目中有很广 ...

  9. C++ Primer笔记12_运算符重载_递增递减运算符_成员訪问运算符

    1.递增递减运算符 C++语言并不要求递增递减运算符必须是类的成员.可是由于他们改变的正好是所操作对象的状态.所以建议设定为成员函数. 对于递增与递减运算符来说,有前置与后置两个版本号,因此.我们应该 ...

最新文章

  1. 【jQuery 区别】attr()和prop()的区别
  2. python可以从事什么工作-对话极客晨星:现在学Python 长大可以从事什么工作?...
  3. cad去水印_CAD神技巧神插件,助你绘图效率提高N倍!
  4. Django框架使用
  5. 域控 批量导入 用户_kerberos域用户提权分析
  6. groovy:gradle
  7. 在Jersey 2中进行集成测试自定义验证约束
  8. ERROR: Process pool report error: Can‘t pickle
  9. 用.net中的SqlBulkCopy类批量复制数据 (转载)
  10. jedis访问redis学习笔记
  11. Thrift RPC实战(七) 基于zookeeper和thrift的RPC服务发布订阅
  12. java怎么反编译_Java入门教程-Java的反编译
  13. 微信小程序图片布满整个窗口
  14. PcShare 2005 源代码
  15. word图片居中, 实际没效果解决、行间距无效果
  16. C语言 计算个人所得税
  17. 聊聊各种“上门”能不能做起来
  18. C++学习(complex类)
  19. 7.2 Flowable 背压
  20. 证券运维外包第3个月工作总结

热门文章

  1. Windows 8.1 重复数据删除
  2. 推荐升级版PDF在线转Word转换器
  3. very_confusing
  4. 【BZOJ】1692: [Usaco2007 Dec]队列变换
  5. 好东西,各城市域名解析测试及网速测试
  6. 使用wxSqlite3来解决sqlite加密问题zz
  7. Mysql中NUMERIC和DECIMAL类型区别比较
  8. ISelectionSet接口
  9. Python 爬虫从入门到进阶之路(七)
  10. JavaScript 返回多个值