Struts2 核心基础总结

学习参考资料:

主:

一个号称从事软件开发超过16年的老外的网站

Apache官网上的Struts2

辅:

一本《深入浅出Struts2》

一本《Struts2技术内幕》

注:笔者会不断修改完善,因为刚开始记笔记,时间比较紧

笔记方法:问题——答案式;

学习策略:先以运行相关具体内容为主,再进行抽象理论描述



**第一问:Struts 2是什么?**

1、Struts2运行框架和核心组件

Struts 2角度:Struts 2运行的框架结构图

Struts 2的五大核心组件分别是:

 Actions

     Interceptors

     Value Stack/OGNL

     Results/Results Types

     View Technologies

MVC角度:Struts2实现MVC的比较具体的运行结构图:

PS:第一张图对Request生命周期的描述才是完整的!

Action介绍

关键词:映射  数据类型转换  Result

Action是Struts2框架的核心,每一个URL都会被映射到一个具体的Action(URL是从V层,如一个登录界面发过来的,Action是M层,所以这种映射就是实现V层和M层的映射),这个具体的Action提供了服务来自客户端的Request的必要的处理逻辑(即处理方法,如execute)。

Action提供了另外两个重要的功能:数据类型转换和决定哪一个视图作为响应返回给客户端。

数据类型转换是指:来自Request的数据类型,转换成响应的那个视图的数据类型,也就是判断是JSP类型还是其他的Result Types。

决定哪一个视图作为响应返回给客户端就是:Result是什么。和URL有映射关系的那个Action中有一个execute方法,方法里有一个选择条件语句——用以判断返回的视图是哪一个,execute方法执行完后会返回一个result。这个Result对应于struts.xml文件中的result元素,这个元素的值就就是要返回给客户端的视图。注意:Action中的方法有一个返回的结果(result),配置文件struts.xml有一个result标签。

PS:这三个要点很集中。但需要把它们细分出来。

Interceptors介绍:

拦截器从概念上讲,就像Servlet过滤器或者JDK里的代理类(设计模式里有一个模式叫代理模式)。

Interceptor可以独立于Action实现交叉功能。用Interceptor可以实现:

Action调用前提供预处理逻辑;

Action调用后提供后处理逻辑;

捕捉异常从而实现交替处理。

Struts2提供的许多特点都是由拦截器实现的:比如异常处理,文件上传,生命周期回收,验证器。Struts2的许多功能都基于拦截器,所以一个Action分配有7、8个拦截器是很常见的。

Struts2提供了一系列配置好了的拆箱即可使用的拦截器,以下是其中一部分:

alias

checkbox

conversionError

creatSession

debuggin

execAndWait

exception

fileUpload

……

拦截器的使用:只需将拦截器配置在struts.xml文件中的action元素下。

Result Types介绍

在Struts MVC框架中,struts.xml文件中的Result标签代表着V层。动作负责执行业务逻辑,之后便是使用Result标签展示V。Result标签是Action标签的子标签,对应着的是Action类有返回的result。

result标签通常带有一些导航规则。比如用户登录有三种结果,1.登陆成功;2.登录失败——用户名或密码不正确;;3.账号锁定。这种情况下,Action的方法就会有三种可能的字符串输出,result有三种对应的值——也就是三种V,来实现响应。

Result中我们不一定要用JSP类型的文件作为响应发送给客户端。MVC范式的目的是实现层与层之间的分离和高度可配置的。Result标签的默认Type是dipatcher,用来分发JSP页面,当然你也可以用其他的标记语言来作为result type。

Value Stack值栈介绍:

值栈,是一些对象构成的集合,它按照以下顺序保存了以下对象:

1、临时对象。页面执行期间会有很多临时的对象。比如通过JSP标签循环的集合的当前迭代值。

2、模型对象。如果你在Struts2中使用模型对象Model Objects,action出现在值栈之前模型对象就会被放置在这里。

3、Action对象。就是正在被执行的当前的action对象。

4、指定的对象。比如#application,#session,#request,#attr和与servlet scope相应的#parameters。

如第二张图所示:可以通过提供给JSP、Velocity、FreeMarker的标签来set值栈。而Action可以通过get方法来获取值栈对象。值栈提供了一些方法来操作值栈对象。

 OGNL对象图形导航语言介绍:

这种强大的表达语言用于引用和操作值栈里的数据。它还可以帮助数据传输和类型转换。

OGNL和JSP的EL很相似。OGNL基于上下文有一个根或者一个默认对象的思想。根对象的属性可以通过#这个标记符号来引用。

struts2为OGNL的使用建立了一张ActionContext图,这张ActionContext图包括以下部分:

application:application范围内的变量

session: session范围内的对象

root/value stack: 所有的action对象的变量都存储在这里

request: request范围内地变量

parameters:request参数

attributes:属性存储在page、request、session和application范围内。

理解action对象始终在value stack中这一点是很重要的。所以,如果你的action对象有属性x、y,那么它们就准备好可以被你使用了。

ActionContext里的对象可以通过#标记符号来访问,而值栈中的对象可以直接访问。

OGNL同样支持处理集合——Map,Set,List。

时间: 2024-11-02 22:58:10

Struts2 核心基础总结的相关文章

Struts2开发基础

Struts2开发基础 struts2采用拦截器的机制来处理用户的请求,使得业务逻辑控制器能够与ServletAPI完全脱离开. 1. Hello World! 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/

Android核心基础第五天

一.学习目标及要求 课程目标 课程内容(必须讲的内容,就是讲课的知识点的顺序) * 掌握Activity 配置 * 掌握 Intent 显示意图 * 掌握 Intent 隐式意图 * 掌握两种意图的使用场景 * 掌握 activity 开启的数据传递 * 掌握activity的生命周期 * 掌握横竖屏切换的生命周期 * 掌握不同android版本 生命周期的细微差别 * 掌握开启activity获取返回值 * 掌握请求码 结果码的作用 * 掌握程序入口activity配置参数 * 掌握显示意图 

【Windows】Windows Server 2008 R2:核心基础架构

核心基础架构 Windows Server提供了核心基础架构服务以支持网络的运行.Windows Server技术已经成熟了,其中的角色和功能也同样成熟了.Windows Server 2008 R2继续改进了核心基础架构服务,这些服务一直都是Windows Server的一部分,它们为我们的业务提供了一个稳固的基础.点击以下核心基础架构角色以了解更多: Active Directory(AD) 应用程序和Web服务 可用性和可量测性 备份和恢复-Windows Server Backup Br

2.C#1语言核心基础

C#1语言核心基础 本部分将重点讨论C#1语言中的几个核心基础,他们包括:委托.类型系统.值/引用类型 1.委托 委托类似与函数指针,是要在恰当的时间执行的一系列操作,如果代码想要执行操作,但不知道操作细节,就可以使用委托. 简单委托的构成 要执行一个委托必须满足一下4个条件 申明委托类型 创建一个方法包含要执行的代码 创建一个委托实例 调用委托实例 合并和删除委托 上面的例子委托实例都只是一个操作,但是真实情况要稍微复杂一些,委托实例实际有一个操作列表与之关联,这就是调用列表. System.

Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(一)

初学JavaWeb开发,请远离各种框架,从Servlet开始. Web框架是开发者在使用某种语言编写Web应用服务端是关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处理有关,形成一个基础,在开发别的应用项目的时候则可以从这个剥离出来的基础做起,让开发者更关注具体的业务问题,而不是Web的请求和响应的控制. 框架很多,但套路基本类似,帮你隐藏很多关于HTTP协议细节内容,专注功能开发. 但对于一个初学者来说,过早的接触框架往往事倍功半!同样一个问题,换一种

STRUTS2核心控制器:FilterDispatcher

1. 在 struts1.x 系列中 , 所有的请求是通过一个 servlet(ActionServlet) 来管理控制的 , 在 Struts2.X 而是经过一个 Filter 来处理请求的. Struts 2 将核心控制器设计成 Filter ,而不是一个普通 Servlet . 因为设计者为了实现AOP(面向方面 编程)概念. struts1.x 中 <servlet> <servlet-name>action</servlet-name> <servlet

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

C# 1的核心基础之一——委托

C# 1的核心基础之一--委托 C# 1的核心基础之一--委托简单委托的构成合并和删除委托事件的简单讨论委托总结 简单委托的构成 声明委托类型: delegate void StringProcessor(string input); 为委托实例的操作找到一个恰当的方法 void PrintString(string x)完全符合要求 void PrintInteger(int x)参数类型不兼容 void PrintTwoStrings(string x, string y)参数个数不匹配 i

css核心基础总结篇

今日这篇是整合前面的css补充知识的. 我觉得前面的关于css的知识补充进去有点乱,今日整理整理一下. 层叠样式表 层叠是什么意思?为什么这个词如此重要,以至于要出现在它的名称里. 层叠可以简单地理解为冲突的解决方案. 什么是冲突? 就是同个元素在使用不同的选择器选择中后添加相同的样式. 优先级规则可以表述为 行内样式>ID样式>类别样式>标记样式 在复杂的页面中,某一个元素有可能会从很多地方获取样式,例如一个网站的某一 级标题整体设置为使用绿色,而对某个特殊栏目需要使用蓝色,这样在栏目