没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
本章讲述 的工作原理。
读者如果曾经学习过 或者有过 的开发经验,那么千万不要想当然地以为这一章
可以跳过。实际上 与 并无我们想象的血缘关系。虽然 的开发小组极力保留
的习惯,但因为 的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。
是 社区和 社区的共同成果,我们甚至可以说, 是 的
升级版,他采用的正是 的核心,所以, 并不是一个不成熟的产品,相反,构建在
基础之上的 是一个运行稳定、性能优异、设计成熟的 框架。
本章主要对 的源代码进行分析,因为 与 的关系如此密不可分,因此,读
者需要下载 的源代码,访问 即可
自行下载。
下载的 源代码文件是一个名叫 的压缩包,里面的目录和文件非常多,
读者可以定位到 !!!!!!"# 目录下查看 的源文
件,如图 $ 所示。
(图 $)
主要的包和类
框架的正常运行,除了占核心地位的 的支持以外, 本身也提供了许多类,这
些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个 类都访问了 提
供的功能,从而也可以看出 与 千丝万缕的联系。但无论如何, 的核心功能比
如将请求委托给哪个 % 处理都是由 完成的, 只是在 的基础上做了适当的
简化、加强和封装,并少量保留 中的习惯。
以下是对各包的简要说明:
包名 说明
&'
该包封装视图组件, 在视图组件上有了很大加强,不仅增加
了组件的属性个数,更新增了几个非常有用的组件,如
、、、、
等。
(
另外, 可视化视图组件开始支持主题)*,缺省情
况下,使用自带的缺省主题,如果要自定义页面效果,需要将组件的
属性设置为 。
&'+&
该包定义与配置相关的接口和类。实际上,工程中的 和
文件的读取和解析都是由 完成的, 只
做了少量的工作。
&
的核心包,最重要的类都放在该包中。
&
该包只定义了 , 个类,他们是
%-、%-.、/"
.,这三个类都是对 的扩展。
&
定义内置的截拦器。
&
实用包。
&#
只定义了一个类:012。
&#
提供 3、"、# 等不同类型的页面呈现。
下表是对一些重要类的说明:
类名 说明
&'0
该类有两个作用:
(
、初始化
、调用指定的 % 的 )*
方法。
&'.0
这是一个过滤器。文档中已明确说明,如
果没有经验,配置时请将 的值
设成4。
(
该类有四个作用:
、执行 %
、清理 %5,避免内存
泄漏
,、处理静态内容(#&''
)
$、为请求启动 6 的截拦器
链。
'%-
% 的代理接口。
'-.
生产 %- 的工厂。
%7#
负责调用 % 和截拦器。
+&#'
85+&-#
负责 的配置文件的解析。
的工作机制 , 体系结构图
的体系结构如图 9 所示:
(图 9)
, 的工作机制
从图 9 可以看出,一个请求在 框架中的处理大概分为以下几个步骤:
、客户端初始化一个指向 # 容器(例如 :)的请求;
、这个请求经过一系列的过滤器(.)(这些过滤器中有一个叫做 %55; 的
可选过滤器,这个过滤器对于 和其他框架的集成很有帮助,例如:<'-&);
,、接着 .0 被调用,.0 询问 %< 来决定这个请求是否需
要调用某个 %;
$、如果 %< 决定需要调用某个 %,.0 把请求的处理交给
%-;
9、%- 通过 5+&'<& 询问框架的配置文件,找到需要调用的 % 类;
=、%- 创建一个 %7# 的实例。
>、%7# 实例使用命名模式来调用,在调用 % 的过程前后,涉及到相关拦截器
(7)的调用。
?、一旦 % 执行完毕,%7# 负责根据 中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个 % 链)一个需要被表示的 @- 或者 .<
的模版。在表示的过程中可以使用 '框架中继承的标签。在这个过程中需要涉及到
%<。
注:以上步骤参考至网上,具体网址已忘记。在此表示感谢!
,, 源代码分析
和 不同, 的启动是通过 .0 过滤器实现的。下面是该过滤器在
文件中的配置:
代码清单 =:(截取)
A+B
A+BA+B
A+B
&.0
A+B
A+B
A+&B
A+BA+B
AB4AB
A+&B
建议,在对 的配置尚不熟悉的情况下,将 配置为4,这样该过滤器将
截拦所有请求。
实际上,.0 除了实现 . 接口以外,还实现了 接口,继承代码如下:
代码清单 >:.0 结构
'.0''C'.'D
E
并没有定义业务方法,只定义了若干个常量。 对常用的接口进行了重新封装,
比如 F#1G、F#1、F#5 等。 以下是
的定义:
代码清单 ?:"#
3''D
44
453F::-G"
4
+'&'F::-H1I;:'J'
!F#1G!K
44
453F::-"
4
+'&'F::-H1-/L'J'
!F#1!K
44
453F::-G'E
4
+'&'12M:H07-%:5F1'J'
!#0!K
44
453#'E"
4
+'&'12M:H5/L:8:'J'
!#5!K
44
453@-&'E
4
+'&'-%NH5/L:8:'J'
!-&5!K
4453-5"4
+'&':1;:H-/1:M:H5/L:8:'J'
!!K
E
容器启动后,.0 被实例化,调用 ).5+&'+5+&*方法。该方法创建
0 类的对象,并且将 .0 配置的初始化参数传到对象中(详情请参考代码清单
),并负责 % 的执行。然后得到参数 &,值得注意的是,还有另外三个固定的包和该参
数进行拼接,分别是 &、、和
&&&&,中间用空格隔开,经过解析将包名变成路径后存储到一
个名叫 -+ 的数组中,这些目录中的文件会被自动搜寻。
代码清单 O:.0)*方法
#').5+&'+5+&*''#'
D
+5+&'J'+5+&K
'J'0)+5+&*K
)*K
&''J'+5+&&7-)!&!*K
&'&'J'!&''
&&&&!K
3')'PJ'*'D
&'J''Q'!'!'Q'&K
E
剩余22页未读,继续阅读
资源评论
- 周学成20192013-01-24好资源,讲得非常明白透彻,深入浅出地讲解struts工作原理,多谢楼主多谢CSDN .
- Ryan2102102012-03-01好资源,讲得非常明白透彻,深入浅出地讲解struts工作原理,多谢楼主多谢CSDN
- ouchuquan2017-04-01可以,非常不错的
- ndsunwei2013-07-30讲得非常明白,多谢楼主
young3917
- 粉丝: 0
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功