复旦大学软件学院oOAD课程期末报告 Introduction to struts 2.0 复旦大学软件学院OOAD课程 期末报告 Introduction to struts2.0 0461013吴玮杰 张力 0461109李婉蓉 0461111金薇薇 0461119徐晓蓉
复旦大学软件学院 OOAD 课程 期末报告 Introduction to Struts2.0 Page | 1 复旦大学软件学院 OOAD 课程 期末报告 Introduction to Struts2.0 0461013 吴玮杰 0461019 张 力 0461109 李婉蓉 0461111 金薇薇 0461119 徐晓蓉
复旦大学软件学院oOAD课程期末报告 Introduction to struts 2.0 目录 1引言 1.1 Struts2.0背景简介 12 Struts1简介及存在的问题… 337 13 WebWork简介 14 Struts2起源 2初窥 Struts2 2.1 Struts2框架架构 2.2 Struts2的配置文件… 2.2.1 web xml 2.2.2 Struts. xml 23 Strut2的标签库 598 24 Struts2与 Struts1的对比 2.5 WebWork和 Struts2对比 3深入理解 Struts2 31 Struts2的控制器组件 32拦截器( Interceptor) 321拦截器概述 32.2拦截器实现原理 323 Struts2中己有的拦截器 324配置和使用拦截器. 325自定义拦截器 326拦截器总结… ∴45 33转换器( Converter)… 331转换器概述 332 Struts2中已有的转换器 33.3批量封装对象(Bean)… 334转换错误处理. 335转换器总结 ∴55 4 Struts2与其他jde集成高阶应用 4.1IDE简介 4.2 Struts2与 Spring的集成 4.3Stts2与 CommonTemplate集成 44 Struts2与 click framework集成 4.5 Struts2、 spring2与 hibernate3集成
复旦大学软件学院 OOAD 课程 期末报告 Introduction to Struts2.0 Page | 2 目 录 1 引言 ..............................................................................................................................................3 1.1 Struts2.0 背景简介........................................................................................................3 1.2 Struts 1 简介及存在的问题 ..........................................................................................3 1.3 WebWork 简介................................................................................................................7 1.4 Struts 2 起源 ................................................................................................................12 2 初窥 Struts2...............................................................................................................................13 2.1 Struts 2 框架架构.........................................................................................................13 2.2 Struts 2 的配置文件 ....................................................................................................15 2.2.1 web.xml..................................................................................................................15 2.2.2 Struts.xml ...............................................................................................................19 2.3 Strut 2 的标签库.............................................................................................................28 2.4 Struts 2 与 Struts 1 的对比 .........................................................................................29 2.5 WebWork 和 Struts 2 对比 ..........................................................................................31 3 深入理解 Struts2.....................................................................................................................32 3.1 Struts 2 的控制器组件.................................................................................................32 3.2 拦截器(Interceptor) ....................................................................................................36 3.2.1 拦截器概述...........................................................................................................36 3.2.2 拦截器实现原理...................................................................................................37 3.2.3 Struts 2 中已有的拦截器 .....................................................................................37 3.2.4 配置和使用拦截器...............................................................................................40 3.2.5 自定义拦截器.......................................................................................................41 3.2.6 拦截器总结...........................................................................................................45 3.3 转换器(Converter).......................................................................................................46 3.3.1 转换器概述...........................................................................................................46 3.3.2 Struts 2 中已有的转换器 ..................................................................................49 3.3.3 批量封装对象 (Bean)..........................................................................................50 3.3.4 转换错误处理.......................................................................................................54 3.3.5 转换器总结...........................................................................................................55 4 Struts2 与其他 ide 集成高阶应用..........................................................................................56 4.1 IDE 简介........................................................................................................................56 4.2 Struts2 与 Spring 的集成 ............................................................................................56 4.3 Struts2 与 CommonTemplate 集成...........................................................................59 4.4 Struts2 与 click framework 集成 ...............................................................................62 4.5 Struts2、spring2 与 hibernate3 集成........................................................................63
复旦大学软件学院oOAD课程期末报告 1引言 11 Struts20背景简介 经过六年多的发展, Struts1己经成为了一个高度成熟的框架,不管是稳定性还 是可靠性都得到了广泛的证明。市场占有率超过20%,拥有丰富的开发人群,几 乎已经成为了事实上的工业标准。但是随着时间的流逝,技术的进步, Struts 的局限性也越来越多地暴露出来,并且制约了 Struts1的继续发展, Struts2以 WebWork优秀的设计思想为核心,吸收了 Struts1的部分优点,建立了一个兼容 WebWork和 Struts1的MvC框架, Struts2的目标是希望可以让原来使用 Struts1、 WebWork 的开发人员,都可以平稳过渡到使用 Struts2框架。 12 Struts1简介及存在的问题 从过去的岁月来看, Struts1是所有MC框架中不容辩驳的胜利者,不管是市场占有 率,还是所拥有的开发人群, Struts1都拥有其他MvC框架不可比拟的优势。 Struts1的成 功得益于它丰富的文档、活跃的开发群体。当然, Struts1是世界上第一个发布的MvC框 架: Struts1.0在2001年6月发布,这一点可能是使它得到如此广泛拥戴的主要原因。 为了使读者可以明白 Struts1的运行机制,下面将简要介绍 Struts1的基本框架。 Struts1框架以 Action Servlet作为核心控制器,整个应用由客户端请求驱动。当客户端 向web应用发送请求时,请求将被 Struts1的核心控制器 Action Servlet拦截, Action Servlet 根据请求决定是否需要调用业务逻辑控制器处理用户请求(实际上,业务逻辑控制器还是控 制器,它只是负责调用模型来处理用户请求),当用户请求处理完成后,其处理结果通过S P呈现给用户 对于整个 Struts1框架而言,控制器就是它的核心, Struts1的控制器由两个部分组成 核心控制器和业务逻辑控制器。其中核心控制器就是 Action Servlet,由 Struts1框架提供 业务逻辑控制就是用户自定义的 Action,由应用开发者提供 对于大部分用户请求而言,都需要得到服务器的处理。当用户发送一个需要得到服务器 处理的请求时,该请求被 Action Servlet拦截到, Action Servlet将该请求转发给对应的业务逻 辑控制器,业务逻辑控制器调用模型来处理用户请求:如果用户请求只是希望得到某个UR
复旦大学软件学院 OOAD 课程 期末报告 Introduction to Struts2.0 Page | 3 1 引言 1.1 Struts2.0 背景简介 经过六年多的发展,Struts1 已经成为了一个高度成熟的框架,不管是稳定性还 是可靠性都得到了广泛的证明。市场占有率超过 20%,拥有丰富的开发人群,几 乎已经成为了事实上的工业标准。但是随着时间的流逝,技术的进步,Struts1 的局限性也越来越多地暴露出来,并且制约了 Struts1 的继续发展。 Struts 2 以 WebWork 优秀的设计思想为核心,吸收了 Struts 1 的部分优点,建立了一个兼容 WebWork 和 Struts 1 的 MVC 框架,Struts 2 的目标是希望可以让原来使用 Struts 1、WebWork 的开发人员,都可以平稳过渡到使用 Struts 2 框架。 1.2 Struts 1 简介及存在的问题 从过去的岁月来看,Struts 1 是所有 MVC 框架中不容辩驳的胜利者,不管是市场占有 率,还是所拥有的开发人群,Struts 1 都拥有其他 MVC 框架不可比拟的优势。Struts 1 的成 功得益于它丰富的文档、活跃的开发群体。当然,Struts 1 是世界上第一个发布的 MVC 框 架:Struts 1.0 在 2001 年 6 月发布,这一点可能是使它得到如此广泛拥戴的主要原因。 为了使读者可以明白 Struts 1 的运行机制,下面将简要介绍 Struts 1 的基本框架。 Struts 1 框架以 ActionServlet 作为核心控制器,整个应用由客户端请求驱动。当客户端 向 Web 应用发送请求时,请求将被 Struts 1 的核心控制器 ActionServlet 拦截,ActionServlet 根据请求决定是否需要调用业务逻辑控制器处理用户请求(实际上,业务逻辑控制器还是控 制器,它只是负责调用模型来处理用户请求),当用户请求处理完成后,其处理结果通过 JS P 呈现给用户。 对于整个 Struts 1 框架而言,控制器就是它的核心,Struts 1 的控制器由两个部分组成: 核心控制器和业务逻辑控制器。其中核心控制器就是 ActionServlet,由 Struts 1 框架提供; 业务逻辑控制就是用户自定义的 Action,由应用开发者提供。 对于大部分用户请求而言,都需要得到服务器的处理。当用户发送一个需要得到服务器 处理的请求时,该请求被 ActionServlet 拦截到,ActionServlet 将该请求转发给对应的业务逻 辑控制器,业务逻辑控制器调用模型来处理用户请求;如果用户请求只是希望得到某个 UR
复旦大学软件学院oOAD课程期末报告 Introduction to struts 2.0 L资源,则由 Action Servlet将被请求的资源转发给用户 Struts1的程序运行流程如图17所示 mTTP请求 核心控制器 转发请求 业务逻辑控制器 客户端浏览器 转发请求 调用业务逻辑方法 Struts. xml HP响应 图1.7 Struts1的程序运行流程 下面就 Struts1程序流程具体分析MVC中的三个角色。 (1)Mode部分 Struts1的Mode部分主要由底层的业务逻辑组件充当,这些业务逻辑组件封装了底层 数据库访问、业务逻辑方法实现。实际上,对于一个成熟的企业应用而言,Mode部分也不 是一个简单的 Java bean所能完成的,它可能是一个或多个EB组件,可能是一个 WebServic e服务。总之,Mode部分封装了整个应用的所有业务逻辑,但整个部分并不是由 Struts1 提供的, Struts1也没有为实现Mode组件提供任何支持 (2)view部分 Struts1的view部分采用JsP实现。 Struts1提供了丰富的标签库,通过这些标签库可 以最大限度地减少脚本的使用。这些自定义的标签库可以输出控制器的处理结果。 虽然 Struts1提供了与Tes框架的整合,但 Struts1所支持的表现层技术非常单一:既 不支持 FreeMarker、 Velocity等模板技术,也不支持 Jasper Reports等报表技术。 (3) Controller部分 Struts1的 Controller由两个部分组成。 系统核心控制器:由 Struts1框架提供,就是系统中的 Action Servlet 业务逻辑控制器:由 Struts1框架提供,就是用户自己实现的 Action实例 Struts1的核心控制器对应图1.7中的核心控制器( Action Servlet)。该控制器由 Struts 1框架提供,继承 Httpservlet类,因此可以配置成一个标准的 Servlet,该控制器负责拦截所 有HTP请求,然后根据用户请求决定是否需要调用业务逻辑控制器,如果需要调用业务逻 辑控制器,则将请求转发给 Action处理,否则直接转向请求的JsP页面
复旦大学软件学院 OOAD 课程 期末报告 Introduction to Struts2.0 Page | 4 L 资源,则由 ActionServlet 将被请求的资源转发给用户。 Struts 1 的程序运行流程如图 1.7 所示。 图 1.7 Struts 1 的程序运行流程 下面就 Struts 1 程序流程具体分析 MVC 中的三个角色。 (1)Model 部分 Struts 1 的 Model 部分主要由底层的业务逻辑组件充当,这些业务逻辑组件封装了底层 数据库访问、业务逻辑方法实现。实际上,对于一个成熟的企业应用而言,Model 部分也不 是一个简单的 JavaBean 所能完成的,它可能是一个或多个 EJB 组件,可能是一个 WebServic e 服务。总之,Model 部分封装了整个应用的所有业务逻辑,但整个部分并不是由 Struts 1 提供的,Struts 1 也没有为实现 Model 组件提供任何支持。 (2)View 部分 Struts 1 的 View 部分采用 JSP 实现。Struts 1 提供了丰富的标签库,通过这些标签库可 以最大限度地减少脚本的使用。这些自定义的标签库可以输出控制器的处理结果。 虽然 Struts 1 提供了与 Ties 框架的整合,但 Struts 1 所支持的表现层技术非常单一:既 不支持 FreeMarker、Velocity 等模板技术,也不支持 JasperReports 等报表技术。 (3)Controller 部分 Struts 1 的 Controller 由两个部分组成。 — 系统核心控制器:由 Struts 1 框架提供,就是系统中的 ActionServlet。 — 业务逻辑控制器:由 Struts 1 框架提供,就是用户自己实现的 Action 实例。 Struts 1 的核心控制器对应图 1.7 中的核心控制器(ActionServlet)。该控制器由 Struts 1 框架提供,继承 HttpServlet 类,因此可以配置成一个标准的 Servlet,该控制器负责拦截所 有 HTTP 请求,然后根据用户请求决定是否需要调用业务逻辑控制器,如果需要调用业务逻 辑控制器,则将请求转发给 Action 处理,否则直接转向请求的 JSP 页面
复旦大学软件学院oOAD课程期末报告 Introduction to struts 2.0 业务逻辑控制器负责处理用户请求,但业务逻辑控制器本身并不具有处理能力,而是调 用Mode来完成处理。 Struts1提供了系统所需要的核心控制器,也为实现业务逻辑控制器提供了许多支持 因此,控制器部分就是 Struts1框架的核心。有时候,我们直接将MVC层称为控制器层。 提示对于任何的MVC框架而言,其实只实现了C(控制器)部分,但它负责用控制器 调用业务逻辑组件,并负责控制器与视图技术(JsP、 FreeMarker和 Velocity等)的整 对于 Struts1框架而言,因为它与JsP/ Servlet耦合非常紧密,因而导致了许多不可避免 的缺陷,随着web应用的逐渐扩大,这些缺陷逐渐变成制约 Struts1发展的重要因素- 这也是 Struts2出现的原因。下面具体分析 Struts1中存在的种种缺陷。 (1)支持的表现层技术单一 Struts1只支持JsP作为表现层技术,不提供与其他表现层技术,例如 Velocity、FreM arker等技术的整合。这一点严重制约了 Struts1框架的使用,对于目前的很多 Java EE应用 而言,并不一定使用JsP作为表现层技术 虽然 Struts1处理完用户请求后,并没有直接转到特定的视图资源,而是返回一个Acti on Forward对象(可以理解 Action Forward是一个逻辑视图名),在 struts- config.xm|文件中定 义了逻辑视图名和视图资源之间的对应关系,当 Action Servlet得到处理器返回的 Action For word对象后,可以根据逻辑视图名和视图资源之间的对应关系,将视图资源呈现给用户。 从上面的设计来看,不得不佩服 Struts1的设计者高度解耦的设计:控制器并没有直接 执行转发请求,而仅仅返回一个逻辑视图名一一实际的转发放在配置文件中进行管理。但因 为 Struts1框架出现的年代太早了,那时候还没有 FreeMarker、 Velocity等技术,因而没有 考虑与这些 FreeMarker、 Velocity等视图技术的整合。 L提示 Struts1已经通过配置文件管理逻辑视图名和实际视图之间的对应关系,只是没 有做到让逻辑视图名可以支持更多的视图技术。 虽然 Struts1有非常优秀的设计,但由于历史原因,它没有提供与更多视图技术的整合, 这严重限制了 Struts1的使用
复旦大学软件学院 OOAD 课程 期末报告 Introduction to Struts2.0 Page | 5 业务逻辑控制器负责处理用户请求,但业务逻辑控制器本身并不具有处理能力,而是调 用 Model 来完成处理。 Struts 1 提供了系统所需要的核心控制器,也为实现业务逻辑控制器提供了许多支持。 因此,控制器部分就是 Struts 1 框架的核心。有时候,我们直接将 MVC 层称为控制器层。 提示 对于任何的 MVC 框架而言,其实只实现了 C(控制器)部分,但它负责用控制器 调用业务逻辑组件,并负责控制器与视图技术(JSP、FreeMarker 和 Velocity 等)的整 合。 对于 Struts 1 框架而言,因为它与 JSP/Servlet 耦合非常紧密,因而导致了许多不可避免 的缺陷,随着 Web 应用的逐渐扩大,这些缺陷逐渐变成制约 Struts 1 发展的重要因素—— 这也是 Struts 2 出现的原因。下面具体分析 Struts 1 中存在的种种缺陷。 (1)支持的表现层技术单一 Struts 1 只支持 JSP 作为表现层技术,不提供与其他表现层技术,例如 Velocity、FreeM arker 等技术的整合。这一点严重制约了 Struts 1 框架的使用,对于目前的很多 Java EE 应用 而言,并不一定使用 JSP 作为表现层技术。 虽然 Struts 1 处理完用户请求后,并没有直接转到特定的视图资源,而是返回一个 Acti onForward 对象(可以理解 ActionForward 是一个逻辑视图名),在 struts‐config.xml 文件中定 义了逻辑视图名和视图资源之间的对应关系,当 ActionServlet 得到处理器返回的 ActionFor word 对象后,可以根据逻辑视图名和视图资源之间的对应关系,将视图资源呈现给用户。 从上面的设计来看,不得不佩服 Struts 1 的设计者高度解耦的设计:控制器并没有直接 执行转发请求,而仅仅返回一个逻辑视图名——实际的转发放在配置文件中进行管理。但因 为 Struts 1 框架出现的年代太早了,那时候还没有 FreeMarker、Velocity 等技术,因而没有 考虑与这些 FreeMarker、Velocity 等视图技术的整合。 提示 Struts 1 已经通过配置文件管理逻辑视图名和实际视图之间的对应关系,只是没 有做到让逻辑视图名可以支持更多的视图技术。 虽然 Struts 1 有非常优秀的设计,但由于历史原因,它没有提供与更多视图技术的整合, 这严重限制了 Struts 1 的使用