Struts2流程机制

SSH框架的学习已经有一段时间了,从一开始的略略抵触,到现在的乐意主动去研究,经历了很有趣的过程。从开始的先去接受,到逐渐的、一点点的开始理解机制,过程很享受。

对Struts2的机制的研究已略略有了小的成果,分享给大家。

我们只负责Action和jsp页面的编写,数据的准备及其他工作都是由Struts2内部给我们做好了处理。

页面一个请求发送过来,依次经过一系列拦截器(处理公共部分,如:往数据中心(值栈)填充数据,所处理工作与业务无关),Action,Result。

1,经过一系列拦截器

介绍其中的两个拦截器:ModelDriven、Params;

——一个请求过来,首先创建一个值栈对象,初始化,然后在Map和对象栈中放入一些数据:

(1)值栈的结构:

(2)在Map和对象栈中分别存入什么数据:

Map中:request=…,session=…,application=…,attr=…,

parameters=…;

对象栈中:action对象,…

初始化完之后,还会经过很多拦截器,其中一个拦截器ModelDriven(封装model,把model放入对象栈的栈顶),一个拦截器Params(参数封装,放入参数);

(1)经过…拦截器

(2)再经过ModelDriven拦截器:

Action中实现ModelDriven<>,并实现它的方法:

Public class RoleActionextends ActionSupport implements ModelDriven<Role>{

private Role model = new Role();

private Role getModel(){   //获取栈顶的model对象

return model;

}

}

ModelDriven的作用:把model对象放入对象栈栈顶(原来栈顶是action,现在栈顶是model了)

(3)经过…拦截器

(4)再经过Params拦截器

   Params拦截器的作用:封装参数。

   如何封装?——做了两件事:第一,先到对象栈中封装;第二,再到Map中封装;

   例子:假如,现在对象栈中有model对象在(含有id、name属性)在栈顶,action对象(含有id、age属性);页面访问地址:xx.action?id=3&name=ab&age=20&xx=00;

   经过Params拦截器时,它如何将参数封装?

——先从栈顶开始找,依次找到id、name、age属性,通过各自的Set方法依次设值id=3,name=ab,age=20(注:虽然对象栈中有两个id属性,但是由于model对象的id属性在栈顶,所以找到此id属性就设值,不会继续往下找),但是对象栈中没有xx属性,于是战中就没有这个参数了,通过对象栈就无法得到xx参数,但是Map中有parameters,可以把所有参数放入parameters中,无论在对象栈中有没有写属性,在parameters中都能得到;

——经过一系列拦截器之后,此时数据中心就有了数据,那我们就可以从中获取数据(Action、Jsp中均可从中获取并使用);

2,思考:值栈对象作用范围是什么?

——一个请求。因为每发送一个请求过来,都要经过这样一系列过程:拦截器(往值栈中压入数据)——>Action——>Request

3,细节扩充:

(1)有值栈对象,如何操作Map

——ActionContext.getContext()

.put(k,v);//Map中放入数据

.get(k);//Map中获取数据

或:ActionContext.getContext.getValueStack()

.put(k,v);//Map中放入数据

.get(k);//Map中获取数据

(2)有了值栈对象,如何操作对象栈

——ActionContext.getContext().getValueStack()

.push(obj);//对象栈中放入数据

.pop();Map中获取数据

(3)所以,值栈中有了对象,Action中如何使用栈中的数据:

——通过ActionContext()操作Map,操作对象栈

(4)所以,值栈中有了对象,jsp中如何使用栈中的数据:

——通过OGNL表达式获取

OGNL表达式的格式和语法:

格式:

(1)在Struts.xml中的格式为:${ongl};

(2)在Jsp中的格式为:%{ongl};

(注:只能写在Struts2的自定义标签的属性中)

语法:

user =findValue("user");//从栈中获取user属性

#user = map.get("user"); //从Map中获取user对象

#user.name=map.get("user").getName();//从Map中获取user对象的name属性

(findvalue(expr))的查找顺序:

(1),从对象栈中查找指定名称的属性,从栈顶开始向下找,找到后就返回;

(2)如果从对象栈中没有找到属性,则从Map中查找对应的key值,找到后就返回。

例子:

4,总结

通过此篇博客,我们需要了解什么?

(1)页面一个请求过来,Struts2中依次经过了哪几个过程?

—— 一系列拦截器——>Action——>Request;

——ModelDriven和Params拦截器分别的主要作用;

(2)值栈的概念?

——值栈的结构:对象栈、Map;

——对象栈、Map分别存放什么数据;

(3)(1)和(2)是如何结合在一起的?

——请求过来,一开始经过拦截器,初始化并创建对象栈,经过ModelDriven和Params拦截器时,分别往值栈中封装对象和封装参数,分别封装到相应的地方;此时数据中心中有就有了数据。

以上均是拦截器为我们做的工作,我们只需写Action(通过ActionContext()操作Map,操作对象栈)和Jsp(通过OGNL表达式获取栈中数据)即可。

Struts2流程机制

时间: 2024-10-16 10:24:17

Struts2流程机制的相关文章

改善struts2验证机制的核心设计思想

Struts2的验证机制都是在VO进行赋值转换之后进行验证的,在实际开发中不能使用,那么我们可以在实际项目的应用中在VO进行赋值转换之前自己设计赋值拦截器改善struts2验证机制的核心设计思想:1.将所有用户提交的参数名称接收2.获取用户请求路径,得到请求执行的action名称3.拼接相关action要执行的规则key4.利用反射得到struts2Action提供的读取资源文件的方法5.利用反射得到struts2Action提供的添加错误信息的方法6.利用反射得到struts2Action提供

Struts2运行机制

前言: 首先感谢中国最专业的java培训班<北京尚学堂>的无私奉献精神,免费提供这么多学习资料. 以及我的偶像马士兵老师,感觉您特帅,技术特别牛,今生若能相见,甚好.谢谢. struts2的运行机制: 探讨任何的运行机制,一定是这里开始, (http://localhost:8080/Struts2_Instroduction/hello.action)(.action可省略) 客户端在浏览器输入一个URL地址,这个请求通过http协议发送给tomcat,tomcat接收到请求后,查看请求的是

struts2 - 异常处理机制

struts2 采用声明式的方法管理异常处理,因此,我们无需在 execute方法中编写 大量的 try...catch语句来捕获异常:只需要在 struts.xml文件中配置异常的映射机制,struts2 便能够处理并转入响应的视图资源. eg: 页面输出 异常信息: 例如internal_Error.jsp页面 <body>   <s:property value="exception.message"/> </body>

struts2异常处理机制

一.处理一般异常(javaBean异常) struts2进行异常处理首先需要添加exception拦截器,而默认拦截器栈已经加入了这个拦截器,所以不用特意的声明.在Struts 2框架中,采用声明式异常处理方式.在这种方式下,只需要在struts.xml文件中进行配置,Struts 2便能够处理异常,并跳转到相应的视图,而在Action中无须编写任何异常处理代码. 如果Action在处理请求的过程中出现异常,一个名称为exception的拦截器将拦截该异常,并进行处理.所以在struts.xml

Struts2数据封装机制

Struts2 属性驱动和模型驱动 帮助我们完成了 数据自动获取 数据自动封装 1.使用 属性驱动 来完成 数据自动获取和数据自动封装: index.jsp:表单的填写 <body> <form action="<%=path %>/loginAction" method="post"> 姓名:<input name="name" type="text"> 密码:<inpu

区块链数字货币虚拟币交易平台_法币交易流程机制

随着区块链技术应用的持续火热,国内各大互联网公司相继涉足区块链应用开发领域.区块链的火爆,也使人们加深了对数字货币的认识,本篇主要介绍常见的虚拟币交易平台中的法币交易流程.1.用户充币操作注册登录平台,进入充币操作界面,填写区块链交易ID并选择钱包,提交充币请求,系统请求区块链验证该笔交易.充币成功的话,系统会自动为充币用户加币:充币不成功则提示用户该笔交易无效.2.用户提币操作用户填写提币数量并选择到账的钱包地址,提交到后台,等待管理员审核,若无异常情况,管理员通过提币申请,为用户实现提币操作

HA高可用Stonith介绍及Stonith事件触发流程机制

aa test 原文地址:http://blog.51cto.com/skinglzw/2061762

Struts2学习第一天——struts2基本流程与配置

struts2框架 什么是框架,框架有什么用? 框架 是 实现部分功能的代码 (半成品),使用框架简化企业级软件开发 ,提高开发效率. 学习框架 ,清楚的知道框架能做什么? 还有哪些工作需要自己编码实现 ? 什么是struts2框架,它有什么用? Struts 2是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架. 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大.Struts 2以WebWork为核心 struts2=struts1+

JAVAWEB开发之Struts2详解(一)——Struts2框架介绍与快速入门、流程分析与工具配置以及Struts2的配置以及Action和Result的详细使用

Struts2框架介绍 三大框架:是企业主流JavaEE开发的一套架构.Struts2 + Spring + Hibernate 什么是框架?为什么要学习框架? 框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发. Struts2与MVC? Struts是一款优秀的MVC框架 MVC:是一种思想,是一种模式,将软件分为Model模型.View视图.Controller控制器 JAVAEE软件三层架构:web层(表现层).业务逻辑层.数据持久层(Sun提供javaEE开发规范) Jav