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. android——fargment基础

    1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应 ...

  2. ubuntu自定义分辨率

    首先说下为啥要专门敲个文章来说明这个问题,因为我最近入手了一台分辨率为3200*1800的高分辨率笔记本,但使用的时候发现现在的操作系统及其诸多软件对高分辨率屏幕的支持真的是太烂,字体发虚或者变得非常 ...

  3. Android Support Library

    title: Android Support Library tags: Support Library,支持库 grammar_cjkRuby: true --- DATE: 2016-5-13. ...

  4. 小知识 安卓线程和ui

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  5. UI控件(UITextField)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UITextField* textField1 = ...

  6. 浅析用Base64编码的图片优化网页加载速度

    想必大家都知道网页加载的过程,从开始请求,到加载页面,开始解析和显示网页,遇到图片就再次向服务器发送请求,加载图片.如果图片很多的话,就会产生大量的http请求,从而影响页面的加载速度.所以现在有一种 ...

  7. 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure

    [题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...

  8. 配置apache和nginx的tomcat负载均衡

    概述 本篇文章主要介绍apache和nginx的相关配置,tomcat的相关安装配置我在前面有写过一篇,详细介绍通过两种配置方法配置nginx. tomcat配置参考:http://www.cnblo ...

  9. 小学徒成长系列—StringBuilder & StringBuffer关键源码解析

    在前面的博文<小学徒成长系列—String关键源码解析>和<小学徒进阶系列—JVM对String的处理>中,我们讲到了关于String的常用方法以及JVM对字符串常量Strin ...

  10. CSharpGL(2)设计和使用场景元素及常用接口

    CSharpGL(2)设计和使用场景元素及常用接口 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...