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

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

package com.wang.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 通过actioncontext类访问并获取servletAPI
* 其对象是一个map类型的
* @author Administrator
*/
public class ContextAction extends ActionSupport{
public String execute() throws Exception {
String name="zhangSan";
//获取seesion
Map session = ActionContext.getContext().getSession();
//把想存的值放到session域中
session.put("sessionName", name); //获取request
Map request=(Map)ActionContext.getContext().get("request");
//把想存的值存入request域中
request.put("requestName", name); //获取application
Map application = ActionContext.getContext().getApplication();
//把需要的值存入application域中
application.put("applicationName", name);
return null;
};
}

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

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

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

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

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

package com.wang.action;

import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.ng.servlet.StrutsServlet;
import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class ContextAction1 extends ActionSupport implements ServletRequestAware { HttpServletRequest request;
public String execute() throws Exception {
String name="zhangSan"; request.setAttribute("name", name); return null;
} @Override
public void setServletRequest(HttpServletRequest request) {
//通过该方法可直接获取到request对象
this.request=request; }; }

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. >hibernate.cfg.xml的一些常用配置

    1.数据库的基本配置信息 hibernate.connection.driver_class是配置数据库驱动 hibernate.connection.url是配置数据库的url hibernate. ...

  2. 2016NOIP总结

    从暑假开始学OI到现在,也已经过了4个月.说实话真是快啊...感觉没学什么东西就要去比赛了.怎么说呢,感觉自己真的是个菜鸡啊为什么就要去比赛呢.当初来到这里,是凭着兴趣来的,第一天能打那么多道题(19 ...

  3. 【转载】在 2016 年做 PHP 开发是一种什么样的体验?(一)

    转自:https://www.v2ex.com/t/312651 在 2016 年做 PHP 开发是一种什么样的体验?(一) 嘿,我最近接到一个网站开发的项目,不过老实说,我这两年没怎么接触编程,听说 ...

  4. 四、jquery中的事件与应用

    当用户浏览页面时,浏览器会对页面代码进行解释或编译--这个过程实质上是通过时间来驱动的,即页面在加载时,执行一个Load事件,在这个事件中实现浏览器编译页面代码的过程.时间无论在页面元素本身还是在元素 ...

  5. 如何设置mysql远程访问及防火墙设置

    笔者在一个实际的项目中需要MYSQL远程访问. 情景: 安装好Mysql, 本地访问正常,很奇怪局域的机器都无法访问该服务器上的MYSQL数据库. 经过资料查找 原来Mysql默认是不可以通过远程机器 ...

  6. PHP的FastCGI

    CGI全称是“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据. CGI描述了客户端和这个程序之间传输数据的一 ...

  7. 开放式管理基础结构 OMI

    Windows 长久以来在 CIM 实施领域一直傲立桥头,而这一切都是从 WMI(Windows 管理基础结构)开始的.分布式管理任务组 (DMTF) 通用信息模型 (CIM) 是一种开放式标准,用于 ...

  8. 比官方教程代码更简短的SignalR Server Broadcast示例

    SignalR是微软ASP.NET技术体系中的新成员. 在www.asp.net网站上的SignalR专区有一篇SignalR的入门级教程<Tutorial: Server Broadcast  ...

  9. Angular 2 最终版正式发布

    9月15日,Angular 2 的最终版正式发布了. 作为 Angular 1 的全平台继任者 -- Angular 2 的最终版,意味着什么? 意味着稳定性已经得到了大范围用例的验证: 意味着已经针 ...

  10. Linux学习之Exam系统发布

    配置时间:2015年11月27日 配置人:撰写人:微冷的雨   Happy 01.Linux安装图 欢迎页面 桌面 02.Linux命令之文件目录操作 给北大青鸟五道口校区创建三个机房(L4,L5,L ...