一、使用ActionContext访问Servlet API

strtus2提供了一个ActionContext类,该类别称为Action上下文或者Action环境,Action可以通过该类来访问最常用的Servlet API,该类提供了常用的方法在这做简单介绍:

>getContext();静态方法,获取当前对象的ActionContext实例。

>getSession();返回一个Map对象,该对象模拟了session作用域。

>getApplication();返回一个Map(),该对象模拟了application作用域。

>get(String key);对该方法传入"request"参数,即可返回一个Object对象,该对象模拟了request作用域。

>getParameters();返回一个map()对象,该对象中保存了浏览器上传的参数。

struts2不再依赖HttpServletRequest这样的传统Servlet API类型来获取request,session,application对象,这种方式称“解耦合”;

// action方法中解耦合方式获取request对象
Map<String ,Object> request = (Map<String,Object> ActionContext.getContext().get("request"));
// action方法中或取session作用域对象
Map<String,Object> session = ActionContext.getContext().getSession();
// action方法中获取application对象作用域
Map<String,Object> application = ActionContext().getContext().getApplication();

二、使用Ioc的方式访问Servlet API

action类中只保留使用这些对象的代码,而获取对象的代码有struts2来实习,struts2获取这些对象后,再把这些对象注入Action类中,Action类即可使用这些对象,这种实现的思想就是著名的Ioc.

package action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware; public class UserActions implements RequestAware, SessionAware,
ApplicationAware {
private Map<String ,Object> request;
private Map<String,Object> session;
private Map<String,Object> application; @Override
public void setApplication(Map<String, Object> arg0) {
this.request = request;
} @Override
public void setSession(Map<String, Object> arg0) {
this.session = session;
} @Override
public void setRequest(Map<String, Object> arg0) {
this.application = application;
} }

说明:

上面的这段代码中,Action实现了RequestAware,SessionAware,ApplicationAware接口,这样Struts2就可以为该Action注入request,session,application对象了,以session为例子,struts2取得session对象,当UserAction对象被创建后,Struts2会判断UserAction是否实现了SessionAware接口,若实现了,就会调用UserAction的setSession()方法,并把session作为参数传入该方法,这样就实现了session的注入。

三、使用耦合方式访问Servlet API

ActionContext类没有包装所有的Servlet API,有些功能的实现还是需要原始是Servlet API才能实现,如获取客户端的响应,HttpServletResponse对象,不过strut2提供了ServletActionContext来获取原始是Servlet API.

public String login() {

		Map<String, Object> map = new HashMap<String, Object>();
boolean isLogin = (Boolean) map.get("isLogin");
if (isLogin) {
/**
* 耦合方式
*/
ServletContext sc=ServletActionContext.getServletContext();//得到Servlet上下文
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
session.setAttribute("user", map.get("user"));
return SUCCESS;
} else {
return INPUT;
}
}

  

struts2进阶篇(4)的更多相关文章

  1. struts2进阶篇(2)

    一.Action与MVCstruts2是一个基于MVC的web应用框架,它将应用程序分为三个组件:模型,视图,控制器.模型:包含了应用程序的业务逻辑和业务数据,由封装数据和处理业务的javaBean组 ...

  2. struts2进阶篇(5)

    一.OGNL简介 OGNL (Object-Graph Navigation Language)的缩写,简称对象图导航语言. OGNL表达式的特特点: >能够取对象的属性,也能调用对象的方法. ...

  3. Struts2进阶(一)运行原理及搭建步骤

    Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...

  4. SSH开发模式——Struts2进阶

    在之前我有写过关于struts2框架的博客,好像是写了三篇,但是之前写的内容仅仅是struts2的一些基础知识而已,struts2还有很多有趣的内容等待着我们去发掘.我准备再写几篇关于struts2的 ...

  5. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  6. idea 插件的使用 进阶篇

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...

  7. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

  8. windows系统快捷操作の进阶篇

    上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...

  9. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

随机推荐

  1. centos中 mysql 5.7安装

    以免授权模式启动 编辑 /etc/my.cnf,添加以下内容: linux环境中:vi /etc/my.cnf 在[MySQL(和PHP搭配之最佳组合)d]配置段添加如下两行: user=mysql ...

  2. 精选29款非常实用的jQuery应用插件

    今天我们来分享一些实用的jQuery应用插件,没有特别花哨,但都比较实用,jQuery菜单.jQuery图片都有涉及到,一起来看看. 1.jQuery+CSS3仿IOS无线局域网Wifi DEMO演示 ...

  3. 使用Object的wait,notify,notifyAll做线程调度

    我们知道java中的所有类的祖先都是Object,Object类有四个个方法wait(),wait(long timeout),notify(),notifyAll(),这四个方法可以用来做线程的调度 ...

  4. WinForm 批量设置指定控件中的控件状态

    在开发中常遇到当点击某个按钮的时候,禁用文本框或按钮的的状态,以防止误操作,下面的代码是我已批量设置指定控件中的按钮状态的代码,同理可以延伸出很多操作. /// <summary> /// ...

  5. Java IO 之 FileInputStream & FileOutputStream源码分析

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  6. 一种读取Exchange的用户未读邮件数方法!

    已好几个月没写博客了,由于之前忙于开发基于Sharepoint上的移动OA(AgilePoint)和采用混合移动开发技术开发一个安卓版的企业通讯录APP(数据与lync一致),并于1月初正式上线.马年 ...

  7. Windows Azure Compute Emulator无法启动问题解决方案

    Visual Studio 2013安装了Windows Azure SDK 2.7,但启动Emulator调试时,出现如下错误: Error: The installed Windows Azure ...

  8. Objective-C之类和对象

    http://www.cnblogs.com/kenshincui/p/3861302.html

  9. MyBatis知多少(21)更新操作

    上一章展示了如何使用MyBatis对表进行读取操作.本章将告诉你如何在一个表中使用MyBatis更新记录. 我们已经在MySQL下有EMPLOYEE表: CREATE TABLE EMPLOYEE ( ...

  10. 手机浏览器JS识别

    识别方法:采用Fiddler 抓包工具 侦测手机http链接,抓取http头 查看 工具:Fiddler 1:Fiddler配置 允许远程设备连接,配置端口为默认8888(确保8888端口没有被其他进 ...