struts2进阶篇(4)
一、使用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)的更多相关文章
- struts2进阶篇(2)
一.Action与MVCstruts2是一个基于MVC的web应用框架,它将应用程序分为三个组件:模型,视图,控制器.模型:包含了应用程序的业务逻辑和业务数据,由封装数据和处理业务的javaBean组 ...
- struts2进阶篇(5)
一.OGNL简介 OGNL (Object-Graph Navigation Language)的缩写,简称对象图导航语言. OGNL表达式的特特点: >能够取对象的属性,也能调用对象的方法. ...
- Struts2进阶(一)运行原理及搭建步骤
Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...
- SSH开发模式——Struts2进阶
在之前我有写过关于struts2框架的博客,好像是写了三篇,但是之前写的内容仅仅是struts2的一些基础知识而已,struts2还有很多有趣的内容等待着我们去发掘.我准备再写几篇关于struts2的 ...
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
- idea 插件的使用 进阶篇
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...
- 2. web前端开发分享-css,js进阶篇
一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...
- windows系统快捷操作の进阶篇
上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
随机推荐
- [原]OpenGL基础教程(二)多边形绘制
上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行. 为什么要使用索引方式,总体来说提高性能.如何提高:使用顶点数组的好处是避免大量的函数调用.即避免每画一个顶点就调用1次glVert ...
- centos7.0 手动编译 lamp环境
首先新建用户 lamper,并添加 sodu权限 两种方法:is not in the sudoers file 解决(转) xx is not in the sudoers file 问题解决[转载 ...
- js-2
var myarray= new Array(); var myarray= new Array(8); var myarray= new Array(66,80,60,59,70); var mya ...
- 程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳
来源自:http://www.techug.com/node-js-community 几天前,一名 NPM(Node.js Package Manager)社区的贡献者 Azer Koçulu 出于 ...
- [转]C++学习–基础篇(书籍推荐及分享)
C++入门 语言技巧,性能优化 底层硬货 STL Boost 设计模式 算法篇 算起来,用C++已经有七八年时间,也有点可以分享的东西: 以下推荐的书籍大多有电子版.对于技术类书籍,电子版并不会带来一 ...
- 关于fork的一道经典面试题
这是一道面试题,问程序最终输出几个“-”: #include<stdio.h> #include<sys/types.h> #include<unistd.h> i ...
- oracle数据库的字符集更改
A.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为server端字符集 NLS_LAN ...
- linux 环境变量设置及查看
1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ ech ...
- 【Android菜鸟学习之路】环境搭建问题-修改AVD Path
更改avd默认路径
- MongoDB的学习--文档的插入、删除和更新
最近在看<MongoDB权威指南>,写博客记录一下相关内容~~ 关于安装之类的最基本的就不多说了,从基本操作增删改查开始. MongoDB官网地址:http://www.mongodb.o ...