struts2的Action放弃了request,response等ServletAPI,使得在业务层上更加独立,在有时候使用struts2进行Web开发的时候,不可避免的要在action中使用servletAPI,那么如何在Action中获取并使用servletAPI呢,

  1. 通过ActionContext类的静态方法获取(非IOC方式)

  1. package com.wang.action;
  2. import java.util.Map;
  3. import com.opensymphony.xwork2.ActionContext;
  4. import com.opensymphony.xwork2.ActionSupport;
  5. /**
  6. * 通过actioncontext类访问并获取servletAPI
  7. * 其对象是一个map类型的
  8. * @author Administrator
  9. */
  10. public class ContextAction extends ActionSupport{
  11. public String execute() throws Exception {
  12. String name="zhangSan";
  13. //获取seesion
  14. Map session = ActionContext.getContext().getSession();
  15. //把想存的值放到session域中
  16. session.put("sessionName", name);
  17.  
  18. //获取request
  19. Map request=(Map)ActionContext.getContext().get("request");
  20. //把想存的值存入request域中
  21. request.put("requestName", name);
  22.  
  23. //获取application
  24. Map application = ActionContext.getContext().getApplication();
  25. //把需要的值存入application域中
  26. application.put("applicationName", name);
  27. return null;
  28. };
  29. }

上面获取到的三大域都是Map类型的,比如对于request来说,我们通常喜欢获取HttpServletRequest类型的,因为这个类型的request功能要强大得多,用ActionContext也是可以获取的,而且也是我们更常用的一种方式,如下:

  1. //获取HttpServletRequest
  2. HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
  3. //通过request获取sesssion
  4. HttpSession session = request.getSession();
  • 通过ServletActionContext的静态方法获取(非IOC方式)

    1. package com.wang.action;
    2. import java.util.Map;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpSession;
    5. import org.apache.struts2.ServletActionContext;
    6. import org.apache.struts2.StrutsStatics;
    7. import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet;
    8. import com.opensymphony.xwork2.ActionContext;
    9. import com.opensymphony.xwork2.ActionSupport;
    10. /**
    11. * 通过ServletActionContext类访问并获取servletAPI
    12. * 虽然是使用了静态方法获取request,response,但仍能保证获取到当前用户,当前线程的request,response,
    13. * 不会反生混淆,因为struts2利用ThreadLoca来维护当前线程的servlet对象,是线程安全的
    14. * @author Administrato
    15. */
    16. public class ContextAction2 extends ActionSupport{
    17. public String execute() throws Exception {
    18. String name="zhangSan";
    19. //获取HttpServletRequest
    20. HttpServletRequest request = ServletActionContext.getRequest();
    21.  
    22. //获取session
    23. HttpSession session = request.getSession();
    24. return null;
    25. };
  • 实现相关的Aware接口(IOC方式)

    • request 对应ServletRequestAware接口
    • response对应ServletResponseAware接口
    • session  对应SessionAware接口
    • application对应ServletContextAware接口

    struts2在实例化一个action对象时,如果发现他实现了相关的Aware接口,就会把相应的资源通过Aware接口方法注入进去,所以叫做注入方式(IOC方式),以request为例,实现了ServletRequestAware接口,就会有一个setServletRequest()方法获取request对象,Aware接口实际上是一种拦截器,他会在执行Action前执行,把相关的servlet对象设置进来,代码如下:

  1. package com.wang.action;
  2.  
  3. import java.util.Map;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpSession;
  6.  
  7. import org.apache.struts2.StrutsStatics;
  8. import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet;
  9. import org.apache.struts2.interceptor.ServletRequestAware;
  10.  
  11. import com.opensymphony.xwork2.ActionContext;
  12. import com.opensymphony.xwork2.ActionSupport;
  13.  
  14. public class ContextAction1 extends ActionSupport implements ServletRequestAware {
  15.  
  16. HttpServletRequest request;
  17. public String execute() throws Exception {
  18. String name="zhangSan";
  19.  
  20. request.setAttribute("name", name);
  21.  
  22. return null;
  23. }
  24.  
  25. @Override
  26. public void setServletRequest(HttpServletRequest request) {
  27. //通过该方法可直接获取到request对象
  28. this.request=request;
  29.  
  30. };
  31.  
  32. }

struts2学习笔记--总结获取servletAPI的几种方式的更多相关文章

  1. 【深入Struts2】获取ServletAPI的三种方式

    一:获取servletAPI的三种方法 在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest.HttpSession和ServletContext.Strut ...

  2. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  3. struts2学习笔记 day02 获取参数 访问ServletAPI 结果类型

  4. Linux学习笔记21——线程同步的两种方式

    一  用信号量同步 1 信号量函数的名字都以sem_开头,线程中使用的基本信号量函数有4个 2 创建信号量 #include<semaphore.h> int sem_init(sem_t ...

  5. Prism学习笔记-模块之间通信的几种方式

    在开发大型复杂系统时,我们通常会按功能将系统分成很多模块,这样模块就可以独立的并行开发.测试.部署.修改.使用Prism框架设计表现层时,我们也会遵循这个原则,按功能相关性将界面划分为多个模块,每个模 ...

  6. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  7. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  8. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  9. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

随机推荐

  1. 数据库之SQL编程

    定义局部变量 declare @num int 途径一: 途径二: set 和select赋值方式的区别 唯一区别,如果从数据库表中获取数据,只能用 select ) select @name =st ...

  2. 利用js来实现文字的滚动(也就是我们常常见到的新闻版块中的公示公告)

    首先先看一下大致效果图(因为是动态的,在页面无法显示出来) 具体的实现代码如下: 1.首先是css代码: <style type="text/css"> body,ul ...

  3. Unity小游戏制作 - 暗影随行

    用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...

  4. Web系统的常用测试方法

    在51上看到一篇不错的文章,拿过来分享一下,学习学习! Web系统的常用测试方法如下: 1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确. 2. 相关性检查:删除/增加一项会不会 ...

  5. Finger Trees: A Simple General-purpose Data Structure

    http://staff.city.ac.uk/~ross/papers/FingerTree.html Summary We present 2-3 finger trees, a function ...

  6. Java基础系列——IO流

    ---恢复内容开始--- Java对数据的操作都是通过流的方式,数据的输入和输出是相对内存来说的,将外设的数据读到内存:输入流:将内存的数据写到外设:输出流. 流按操作数据分为两种:字节流,字符流. ...

  7. ASP.NET Core 数据保护(Data Protection)【中】

    前言 上篇主要是对 ASP.NET Core 的 Data Protection 做了一个简单的介绍,本篇主要是介绍一下API及使用方法. API 接口 ASP.NET Core Data Prote ...

  8. 从Undo,Redo谈命令模式

    一般的应用软件中,通常会提供Redo和Undo的操作,比如Paint.NET中的动作面板,Word中的撤销重做,一般我们按Ctrl-Z即可回退到上次操作. 要实现上面的这一功能,最直观的想法就是,我们 ...

  9. SSH实战 · JAVA发送邮件相关

    发送激活邮件 电子邮箱:邮件服务器上的一块空间: 邮件服务器:类比于web服务器(tomcat),有相应的服务器软件: 邮件协议:大公司发送和接收服务器分开,也可以都用一个服务器.           ...

  10. 记一个简单的保护if 的sh脚本

    真是坑爹,就下面的sh,竟然也写了很久! if [ `pwd` != '/usr/xx/bin/tomcat' ] then echo "rstall is not allowed in c ...