MyEclipse6Java开发中文教程 第十二章开发 Struts2+ Spring应用 第十二章开发Sus2+ Spring应用 121介绍 122下载 Struts2开发包 123开发第一个 Struts2应用 12688 1231准备工作 1232开发 Helloworld 1233使用国际化消息 1234基于POJO的Acon开发 1235自定义Acon方法和映射通配符 06908 1236表单处理一一登录例子 1237表单验证 1238给 Action注入参数( paran)值 1239配置属性和 struts. properties文件 124 Struts2整合 Spring 125实现文件上传下载 125.1文件下载 12511单个文件下载 12512下载中文文件 12513下载已存在的文件 1252文件上传 12521介绍和准备工作 12522单个文件上传例子 12523文件上传参数配置 12524上传多个文件 126访问 session, request等JSP对象 127小结 566633 128参考资料 本章将会简要介绍Ss2的基本开发以及和 Spring的整合应用开发。在笔者刚开始 编写本书的时候,并未计划介绍 Struts2的内容。然而在写作的过程中,有两件事打动了我, 使我下定决心将 Struts2的内容加进来。第一件事,是很多培训机构已经开始了 Struts2(或 者 WebWork)的课程,因此,有不少读者希望我能对这个框架做一些视频或者相关的介绍; 第二件事,乃是在我根据网上的 Struts2整合 Spring的文档进行练习的时候,很遗憾的发 现要么介绍不全,要么是已经过时的做法,甚至官方自带的英文文档也有直接写错的地方 总之花了2个小时才算把例子做出来,使我深深的感到对于初学者来说(对我来说, Struts 2也是最近两周才看的,所以也算是这方面的初学者了),看着文档却作不出例子来,那是 相当的痛苦啊。再加上 Struts2已经日益取得了广大程序员的支持和喜爱,因此我希望将我 并不算太深入的经验和大家分享一下,希望能对您的学习有所帮助。 本章并没有介绍 Struts2+ Spring+ Hibernate整合开发是因为: Spring整合了Web层框 刘长炯著
MyEclipse 6 Java 开发中文教程 1 刘长炯著 第十二章 开发 Struts 2 + Spring 应用 第十二章 开发Struts 2 + Spring应用 ................................................................................. 1 12.1 介绍................................................................................................................... 2 12.2 下载Struts 2 开发包 ........................................................................................... 6 12.3 开发第一个Struts 2 应用.................................................................................... 8 12.3.1 准备工作.................................................................................................. 8 12.3.2 开发HelloWorld ..................................................................................... 10 12.3.3 使用国际化消息..................................................................................... 16 12.3.4 基于POJO的Action开发 ........................................................................ 19 12.3.5 自定义Action方法和映射通配符............................................................. 20 12.3.6 表单处理――登录例子 .......................................................................... 26 12.3.7 表单验证................................................................................................ 31 12.3.8 给Action注入参数(param)值 ............................................................. 38 12.3.9 配置属性和struts.properties文件 ........................................................... 39 12.4 Struts 2 整合Spring........................................................................................... 39 12.5 实现文件上传下载 ........................................................................................... 45 12.5.1 文件下载................................................................................................ 45 12.5.1.1 单个文件下载 .............................................................................. 46 12.5.1.2 下载中文文件 .............................................................................. 48 12.5.1.3 下载已存在的文件 ....................................................................... 51 12.5.2 文件上传................................................................................................ 54 12.5.2.1 介绍和准备工作........................................................................... 54 12.5.2.2 单个文件上传例子 ....................................................................... 55 12.5.2.3 文件上传参数配置 ....................................................................... 63 12.5.2.4 上传多个文件 .............................................................................. 65 12.6 访问session,request等JSP对象.................................................................... 69 12.7 小结................................................................................................................. 73 12.8 参考资料.......................................................................................................... 73 本章将会简要介绍 Struts 2 的基本开发以及和 Spring 的整合应用开发。在笔者刚开始 编写本书的时候,并未计划介绍 Struts 2 的内容。然而在写作的过程中,有两件事打动了我, 使我下定决心将 Struts 2 的内容加进来。第一件事,是很多培训机构已经开始了 Struts 2(或 者 WebWork)的课程,因此,有不少读者希望我能对这个框架做一些视频或者相关的介绍; 第二件事,乃是在我根据网上的 Struts 2 整合 Spring 的文档进行练习的时候,很遗憾的发 现要么介绍不全,要么是已经过时的做法,甚至官方自带的英文文档也有直接写错的地方, 总之花了 2 个小时才算把例子做出来,使我深深的感到对于初学者来说(对我来说,Struts 2 也是最近两周才看的,所以也算是这方面的初学者了),看着文档却作不出例子来,那是 相当的痛苦啊。再加上 Struts 2 已经日益取得了广大程序员的支持和喜爱,因此我希望将我 并不算太深入的经验和大家分享一下,希望能对您的学习有所帮助。 本章并没有介绍 Struts2+Spring+Hibernate 整合开发是因为:Spring 整合了 Web 层框
MyEclipse6Jaa开发中文教程 架之后,剩下的就是 Spring整合 Hibernate还是JPA等其它框架,其过程是和web层框架 没有任何关系的。希望读者已经通过上两章的阅读了解这个概念,明白下面这个等式 Struts2+ Spring+ Hibernate/JPA其它框架=( Struts2+ Spring)+( Spring+ Hibernate/JPa其它框架)。因此在本章的基础上,再结合上一章的内容,您可以自然而然的 完成整合 Hibernate或者其它框架的过程 在本章我将会依次给大家简单介绍 Struts2,展示如何获取 Struts2的开发包, Struts2 软件包介绍,简单的 Helloworld的开发,以及基于POJO的 Helloworld开发,接着我们将 第九章的登录示例 Strutslogin Demo用Sts2改写,并加入验证机制和国际化消息,稍后 我们则介绍如何使用 Spring整合Sus2来通过 Spring设置属性,最后我们介绍文件上传 下载以及如何访问 session, request等JSP对象。 121介绍 在第九章开发Ss1X应用中我们已经简要介绍了Stu2和 Struts1之间的关系 WebWork(http://www.opensymphonv.com/webwork/)是一个历史很悠久的优秀的Web层 开发框架。根据一些资料我们了解到, Web Work1和 Struts1是很接近的设计思路,比较 紧耦合,这体现在它的控制器类必须继承自某些特定的类或者接口,需要单独的传值对象 FormBean,开发人员需要直接操纵 request, response和 session这些对象,页面的转向需 要通过特殊的对象来完成( Action Forward)。然而 WebWork2之后,它大胆引入了插件机 制,拦截器,依赖注入,以及POJO的开发模式,并对开发人员屏蔽底层的 request, response 等对象,页面的转向通过返回 String类型即可完成,便于单元测试,并抛弃了一代中的表单 Bean,让表单参数获取和Acon对象合二为一,从而和JSF一道处于第二代Web框架的级别 上(很遗憾的是 Spring MVc到现在为止也还是停留在 Struts1的模式上,除了OC和 Spring 紧密集成之外,无其它特色,这也是它为何至今未被人视为优秀的Web开发框架的原因之 )。 WebWork2花了很大功夫来简化程序员负担,首先就是框架尽量避免让开发人员来在 配置文件中编写不必要的内容,另外拦截器和oC的配套使用,也大大简化了传统的一些任 务例如文件上传。对于常见的动辄N兆的一堆库文件的不知该如何取舍的Web层框架来说 WebWork2的插件机制可以让你在核心类库的基础上按需装配,根据项目的需要来自由增 删类库文件这是和Spng内核差不多的做法吧)。那么第三代Web层框架,目前来说尚未 出现,据说尚末推出的JSF的20版本将会支持号称无配置文件,纯标注( Annotation), PoJo的开发模式,是否这就是第三代Web开发框架?根据文档,我发现 Struts2也正在进 行无配置文件+标注版本的开发工作,看来这的确是个趋势啊。纵观现有框架,配置文件繁 琐,要想用框架,必先XML十自定义标签库的确是个让人一直头疼不已的老毛病了(让人 想起来了东方不败的那句欲练神功,挥剑自X),一个框架一套配置文件和标签库,的确是 让开发人员苦不堪言。笔者从心底里希望Java的Web层框架能易用化,标准化(大家都用 样的接口和标签库),开发工具智能化(微软Ⅵ sual studio net那真不是盖的),开发人 员傻瓜化……不过这样一来工资是不是也下降,我可就不知道了。 后来 Struts和 WebWoκk进行合并,大家一起聚集在 Apache基金会这棵大树下,借着 Struts这个响当当的硬牌子,推出了 Struts2框架,大家不要误会,它仍然也是基于MVC 模式的开发框架,所有 WebWork2的优点它这里也有。据一些文档的说法认为 Struts2就 是 WebWork的部分包重命名,配置文件稍作改动得来的,经过检验目前来看也的确如此 不过因为Suts1和 WebWork2仍然有大量开发人员喜欢使用,所以并未消失,仍然在各 2 刘长炯著
MyEclipse 6 Java 开发中文教程 2 刘长炯著 架之后,剩下的就是 Spring 整合 Hibernate 还是 JPA 等其它框架,其过程是和 Web 层框架 没有任何关系的。希望读者已经通过上两章的阅读了解这个概念,明白下面这个等式: Struts2 + Spring + Hibernate/JPA/其它框架 = (Struts 2 + Spring)+(Spring + Hibernate/JPA/其它框架)。因此在本章的基础上,再结合上一章的内容,您可以自然而然的 完成整合 Hibernate 或者其它框架的过程。 在本章我将会依次给大家简单介绍 Struts 2,展示如何获取 Struts 2 的开发包,Struts 2 软件包介绍,简单的 HelloWorld 的开发,以及基于 POJO 的 HelloWorld 开发,接着我们将 第九章的登录示例 StrutsLoginDemo 用 Struts2 改写,并加入验证机制和国际化消息,稍后 我们则介绍如何使用 Spring 整合 Struts2 来通过 Spring 设置属性,最后我们介绍文件上传 下载以及如何访问 session,request 等 JSP 对象。 12.1 介绍 在第九章 开发 Struts 1.x 应用中我们已经简要介绍了Struts 2 和Struts 1 之间的关系。 WebWork(http://www.opensymphony.com/webwork/)是一个历史很悠久的优秀的Web层 开发框架。根据一些资料我们了解到,WebWork 1 和Struts 1 是很接近的设计思路,比较 紧耦合,这体现在它的控制器类必须继承自某些特定的类或者接口,需要单独的传值对象: FormBean,开发人员需要直接操纵request,response和session这些对象,页面的转向需 要通过特殊的对象来完成(ActionForward)。然而WebWork 2 之后,它大胆引入了插件机 制,拦截器,依赖注入,以及POJO的开发模式,并对开发人员屏蔽底层的request,response 等对象,页面的转向通过返回String类型即可完成,便于单元测试,并抛弃了一代中的表单 Bean,让表单参数获取和Action对象合二为一,从而和JSF一道处于第二代Web框架的级别 上(很遗憾的是Spring MVC到现在为止也还是停留在Struts 1 的模式上,除了IOC和Spring 紧密集成之外,无其它特色,这也是它为何至今未被人视为优秀的Web开发框架的原因之 一)。WebWork 2 花了很大功夫来简化程序员负担,首先就是框架尽量避免让开发人员来在 配置文件中编写不必要的内容,另外拦截器和IOC的配套使用,也大大简化了传统的一些任 务例如文件上传。对于常见的动辄N兆的一堆库文件的不知该如何取舍的Web层框架来说, WebWork 2 的插件机制可以让你在核心类库的基础上按需装配,根据项目的需要来自由增 删类库文件(这是和Spring内核差不多的做法吧)。那么第三代Web层框架,目前来说尚未 出现,据说尚未推出的JSF的 2.0 版本将会支持号称无配置文件,纯标注(Annotation), POJO的开发模式,是否这就是第三代Web开发框架?根据文档,我发现Struts 2 也正在进 行无配置文件+标注版本的开发工作,看来这的确是个趋势啊。纵观现有框架,配置文件繁 琐,要想用框架,必先XML+自定义标签库的确是个让人一直头疼不已的老毛病了(让人 想起来了东方不败的那句欲练神功,挥剑自X),一个框架一套配置文件和标签库,的确是 让开发人员苦不堪言。笔者从心底里希望Java的Web层框架能易用化,标准化(大家都用 一样的接口和标签库),开发工具智能化(微软Visual Studio .NET 那真不是盖的),开发人 员傻瓜化……不过这样一来工资是不是也下降,我可就不知道了。 后来 Struts 和 WebWork 进行合并,大家一起聚集在 Apache 基金会这棵大树下,借着 Struts 这个响当当的硬牌子,推出了 Struts 2 框架,大家不要误会,它仍然也是基于 MVC 模式的开发框架,所有 WebWork 2 的优点它这里也有。据一些文档的说法认为 Struts 2 就 是 WebWork 的部分包重命名,配置文件稍作改动得来的,经过检验目前来看也的确如此。 不过因为 Struts 1 和 WebWork 2 仍然有大量开发人员喜欢使用,所以并未消失,仍然在各
MyEclipse6Java开发中文教程 自的支持者下继续发展着。除了传统的例如流程跳转,国际化消息等等之外, Struts2还支 持AJAX等的开发(目前是基于DoJO框架的实现),多种表示层框架(不仅仅局限于JsP 页面展示),以及插件机制,已经发展成了一个全面的Web层框架 注意:Stts2和 Struts1的代码并不兼容,包括包文件和配置文件都不一样, Struts1 的程序必须加以修改才能运行于 Struts2之下,可以认为它们是两个不同的框架 以下是其官方网站的特性介绍: 开发? o容易上手-从教程和模版程序或者 Maven原型可以很容易的开发出新项 日 改进的设计一清晰的代码设计对应着独立于HTTP的框架接口 o增强的标签(Tag)-使用样式表驱动的表单标签以及所提供的标签可以减 少编码量。 有状态的复选框( Checkbox)-避免了特殊的处理代码,智能复选框能感 知自己的状态何时被切换 。灵活的取消按钮-取消时直接转向另一个操作( action) 最好的AJAX支持一通过使用和标准 Struts标签观感一致的AJAX标签, 可以增加交互性和灵活性 o方便的 Spring集成-使用 Spring向 Action中注入依赖关系,无需编写 额外的连接代码或者其它配置。(同时支持 Plexus?) 增强的表示层展示-可以将处理结果以 JasperReports, JFreechart Action链,或者文件下载的方式展示 PoJo表单一不需要 Action Form!可以使用任何 Javabean来捕获输入 或者直接将属性设置到 Action类上。可以同时使用二进制和字符串类型的 POJO Action-使用任何类作为 Action类-甚至接口也是可选的 发有 o方便的插件机制-添加JAR文件即可添加框架扩展。无需人工配置!捆绑 的插件提供对 JavaServer Faces, JasperReports, JFree Chart,Tles.等 众多框架的支持。 内置调优一查看 Struts2内部,找到死循环的位置! 准确的错误汇报一直接跳转到错误的位置和行号 维护 便于测试的 Action-可以直接测试Sts2 Action,无虚依赖任何模拟的 HTTP对象。 聪明的默认值-跳过明显的或者多余的设置。大多数框架的配置元素都有 默认值可以使用,我们可以忘记它。只需要配置一次! 容易自定义的控制器一需要时可以自定义每个 Action的请求处理。 Struts2 可以用你需要的方式来工作 o内置调试一使用内置调试器可以生成问题报告。 易于调整的标签一修改 Free Marker模版即可自定义标签。不需要再学习 taglib AP!完全支持 JSP Free Marker,以及 Velocity标签。 Sus2框架采用的许可是 Apache License, Version20,可以通过访问这个地址阅读 htto/ ww.apache. org/icenses/LICENSE-20。当然是可以免费用于我们自己的商业软件 的。它的标志图(Logo)如下所示 刘长炯著
MyEclipse 6 Java 开发中文教程 3 刘长炯著 自的支持者下继续发展着。除了传统的例如流程跳转,国际化消息等等之外,Struts 2 还支 持 AJAX 等的开发(目前是基于 DOJO 框架的实现),多种表示层框架(不仅仅局限于 JSP 页面展示),以及插件机制,已经发展成了一个全面的 Web 层框架。 注意:Struts 2 和 Struts 1 的代码并不兼容,包括包文件和配置文件都不一样,Struts 1 的程序必须加以修改才能运行于 Struts 2 之下,可以认为它们是两个不同的框架! 以下是其官方网站的特性介绍: • 开发! o 容易上手 – 从教程和模版程序或者 Maven 原型可以很容易的开发出新项 目。 o 改进的设计 – 清晰的代码设计对应着独立于 HTTP 的框架接口。 o 增强的标签(Tag) - 使用样式表驱动的表单标签以及所提供的标签可以减 少编码量。 o 有状态的复选框(Checkbox) - 避免了特殊的处理代码,智能复选框能感 知自己的状态何时被切换。 o 灵活的取消按钮 – 取消时直接转向另一个操作(action)。 o 最好的AJAX 支持 – 通过使用和标准Struts标签观感一致的 AJAX 标签, 可以增加交互性和灵活性。 o 方便的 Spring 集成 – 使用 Spring 向 Action 中注入依赖关系,无需编写 额外的连接代码或者其它配置 。(同时支持 Plexus?) o 增强的表示层展示 – 可以将处理结果以 JasperReports, JFreeChart, Action 链, 或者文件下载的方式展示。 o POJO 表单 – 不需要 ActionForm! 可以使用任何 JavaBean 来捕获输入 或者直接将属性设置到 Action 类上。可以同时使用二进制和字符串类型的 属性! o POJO Action – 使用任何类作为 Action 类 – 甚至接口也是可选的! • 发布! o 方便的插件机制 – 添加 JAR 文件即可添加框架扩展。无需人工配置!捆绑 的插件提供对 JavaServer Faces, JasperReports, JFreeChart, Tiles... ...等 众多框架的支持。 o 内置调优 – 查看 Struts2 内部,找到死循环的位置! o 准确的错误汇报 – 直接跳转到错误的位置和行号。 • 维护! o 便于测试的 Action – 可以直接测试 Struts2 Action,无虚依赖任何模拟的 HTTP 对象。 o 聪明的默认值 – 跳过明显的或者多余的设置。大多数框架的配置元素都有 默认值可以使用,我们可以忘记它。只需要配置一次! o 容易自定义的控制器 – 需要时可以自定义每个 Action 的请求处理。Struts2 可以用你需要的方式来工作! o 内置调试 – 使用内置调试器可以生成问题报告。 o 易于调整的标签 – 修改 FreeMarker 模版即可自定义标签。不需要再学习 taglib API! 完全支持 JSP, FreeMarker, 以及 Velocity 标签。 Struts 2 框架采用的许可是Apache License, Version 2.0,可以通过访问这个地址阅读: http://www.apache.org/licenses/LICENSE-2.0。当然是可以免费用于我们自己的商业软件 的。它的标志图(Logo)如下所示:
MyEclipse6Java开发中文教程 Struts 运行Sus2需要下列的条件: Servlet aP24, JSP AP120,Java5(或者使用连4 版本,运行于JDK14)。当然换句话说用 Tomcat5或者更高版本就没有任何问题了 Struts2的执行流程大致如此所示:Web服务器启动解析 struts xml,初始化消息文件, ction路径映射等资源,初始化框架→用户请求 XXX. action→Suts2过滤器使用对象工 厂( Object Factory,可以是自带或者是 Spring)创建 Action类的示例→执行loC和拦截器 (包括解析表单参数,文件上传,将解析结果注入 Action对象)→调用 Action中用户编 写的业务方法→根据返回的结果(Resu)路径转向视图层→视图层进行显示(包括调用标 签库等)。 关于其底层结构,从网上搜集到的一些资料认为: WebWork2,实际上是 Webwork+ XWok的总集, Webwork1x版本中,整个框架采用了紧耦合的设计(类似 Struts1x), 而 WebWork20之后, Webwork被拆分为两个部分,即 Webwork2x+XWok2x。当 个请求发起后,从请求的路径名中解析出对应的 Action名称,然后 Webwork2x框架会 遍历 Http Servletrequest、 Http Session、 Servletcontext中的数据,并将其复制到内部的 MpD实现中,至此之后,所有数据操作均在此Map结构中进行,从而将内部数据结构与 Servlet aP|相分离。至此, Webwork的工作阶段结束,数据将传递给XWk进行下一步 处理。从这里也可以看到 Webwork和Ⅹok之间的切分点, Webwork为XWok提供 了一个面向 Servlet的协议转换器,将 Servlet相关的数据转构转换成 WOrk所需要的通 用数据格式,而 WOrk将完成实际的服务调度和功能实现。这样一来,以XWok为核心 只需替换外围的协议转换组件,即可实现不同技术平台之间的切换。那么 Struts2呢,就是 这样一个 Struts2核心平台+ WOrk的实现,其中的 WOrk部分执行和 Servlet AP无关的 流程处理,而Stts2的核心层则提供将 Servlet层提供的数据进行独立封装的过程,进而 XWok基于这些数据进行操作,这样就实现了一个完整的开发框架。XWok相当于一个插 件一样和现有框架组合,构成一个完整的流程处理+ Servlet操纵框架。所以大家会奇怪的 看到Sus2一共有两个核心jar文件: struts2core-20.11ar和 work-204ja,而且更 让人奇怪的是前一个文件中的包定义是 org. apache struts2,而后一个文件中的则是 com.opensymphony. work2,其原因就在于此。本段所介绍的内容仅供提供更多信息之用, 笔者不保证任何准确性和有效性。⑧ 为了便于读者了解相关内容,我把搜集到的一篇关于 Struts1和2的短文列在这里(来 源见本章结尾参考资料) 特性比较 Action类 Struts1x要求Acon类要扩展自一个抽象基类。 Struts1x的一个共有的问题是面向抽象类编程而不是面向 接口编程 Struts2的Acon类实现了一个 Action接口,连同其他接口一起来实现可选择和自定义的服务。 Struts2提 供一个名叫 Action Support的基类来实现一般使用的接口。当然, Action接口不是必须的。任何使用 execute 方法的POJO对象可以被当作 Struts2的 Action对象来使用 线程模型 Struts1 X Action类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且 给开发带来了额外的烦恼。 Action资源必须是线程安全或者同步的 Struts2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中, servlet容器给每 刘长炯著
MyEclipse 6 Java 开发中文教程 4 刘长炯著 运行 Struts 2 需要下列的条件:Servlet API 2.4,JSP API 2.0,Java 5(或者使用 j4 版本,运行于 JDK1.4)。当然换句话说用 Tomcat 5 或者更高版本就没有任何问题了。 Struts 2 的执行流程大致如此所示:Web 服务器启动解析 struts.xml,初始化消息文件, Action 路径映射等资源,初始化框架→用户请求 XXX.action →Struts 2 过滤器使用对象工 厂(Object Factory,可以是自带或者是 Spring)创建 Action 类的示例 →执行 IOC 和拦截器 (包括解析表单参数,文件上传,将解析结果注入 Action 对象) →调用 Action 中用户编 写的业务方法 →根据返回的结果(Result)路径转向视图层 →视图层进行显示(包括调用标 签库等)。 关于其底层结构,从网上搜集到的一些资料认为:WebWork 2,实际上是 Webwork + XWork 的总集,Webwork1.x 版本中,整个框架采用了紧耦合的设计(类似 Struts 1.x), 而 WebWork 2.0 之后,Webwork 被拆分为两个部分,即 Webwork 2.x +XWork 2.x。当 一个请求发起后,从请求的路径名中解析出对应的 Action 名称,然后 Webwork 2.x 框架会 遍历 HttpServletRequest、HttpSession、ServletContext 中的数据,并将其复制到内部的 Map 实现中,至此之后,所有数据操作均在此 Map 结构中进行,从而将内部数据结构与 Servlet API 相分离。至此,Webwork 的工作阶段结束,数据将传递给 XWork 进行下一步 处理。从这里也可以看到 Webwork 和 XWork 之间的切分点,Webwork 为 XWork 提供 了一个面向 Servlet 的协议转换器,将 Servlet 相关的数据转构转换成 XWork 所需要的通 用数据格式,而 XWork 将完成实际的服务调度和功能实现。这样一来,以 XWork 为核心, 只需替换外围的协议转换组件,即可实现不同技术平台之间的切换。那么 Struts 2 呢,就是 这样一个 Struts 2 核心平台+XWork 的实现,其中的 XWork 部分执行和 Servlet API 无关的 流程处理,而 Struts 2 的核心层则提供将 Servlet 层提供的数据进行独立封装的过程,进而 XWork 基于这些数据进行操作,这样就实现了一个完整的开发框架。XWork 相当于一个插 件一样和现有框架组合,构成一个完整的流程处理+Servlet 操纵框架。所以大家会奇怪的 看到 Struts 2 一共有两个核心 jar 文件:struts2-core-2.0.11.jar 和 xwork-2.0.4.jar,而且更 让人奇怪的是前一个文件中的包定义是 org.apache.struts2,而后一个文件中的则是 com.opensymphony.xwork2,其原因就在于此。本段所介绍的内容仅供提供更多信息之用, 笔者不保证任何准确性和有效性。☺ 为了便于读者了解相关内容,我把搜集到的一篇关于 Struts1 和 2 的短文列在这里(来 源见本章结尾参考资料): 特性比较: Action 类 Struts1.x 要求 Action 类要扩展自一个抽象基类。Struts1.x 的一个共有的问题是面向抽象类编程而不是面向 接口编程。 Struts2 的 Action 类实现了一个 Action 接口,连同其他接口一起来实现可选择和自定义的服务。Struts2 提 供一个名叫 ActionSupport 的基类来实现一般使用的接口。当然,Action 接口不是必须的。任何使用 execute 方法的 POJO 对象可以被当作 Struts 2 的 Action 对象来使用。 线程模型 Struts1.x Action 类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且 给开发带来了额外的烦恼。Action 资源必须是线程安全或者同步的。 Struts2 Action 对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet 容器给每一
MyEclipse6Java开发中文教程 个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。 Servlet依赖 Struts1x的 Action类依赖于 Servlet APl,当 Action被调用时 HttpservletreQuest和 Http Servletresponse作为参数传给 execute方法。 Suts2的Acon和容器无关。 Servlet上下文被表现为简单的Maps,允许 Action被独立的测试。 Struts 的 Action可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问 Http Servletrequest Ex Http servletResp 易测性 测试 Struts1X的主要问题是 execute方法暴露了 Servlet APl这使得测试要依赖于容器)。第三方的扩展, 如 Struts Testcase,提供了一套 Struts1的模拟对象(来进行测试)。 Struts2的 Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单 捕获输入 Struts1x使用 Action Form对象来捕获输入。象 Action一样,所有的 Action Form必须扩展基类。因为其他 的 Java Bean不能作为 Action Form使用,开发者经常创建多余的类来捕获输入。 DynaBeans可以被用来 作为替代 Action Form的类来创建。但是,开发者可能是在重新描述(创建)已经存在的 Java Bean(仍然会 导致有冗余的 javabean)。 Struts2直接使用 Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子) 属性的rich对象类型。 Action属性能够通过web页面上的 taglibs访问。 Struts2也支持 Action Form模式 rich对象类型,包括业务对象,能够用作输入输出对象。这种 ModelDriven特性简化了 taglib对POJO输 入对象的引用。 表达式语言 Struts1x整合JsTL,所以它使用JsTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和 索引属性的支持很弱。 Suts2使用JSTL,但是也支持一个更强大和灵活的表达式语言—-" Object Graph Notation Language 将值绑定到页面 Stus1x使用标准JSP机制来绑定对象到页面上下文 suts2使用" Value stacκ"技术,使 taglib能够访问值而不需要把你的页面(vew)和对象绑定起来 Value Stack策略允许通过一系列名称相同但类型不同的属性重用页面(vew) 类型转换 Struts1x的 Action Form属性经常都是 String。 Struts1x使用 Commons-Beanutils来进行类型转换。转换 每一个类,而不是为每一个实例配置。 Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。 验证 Struts1X支持在 Action Form的 validate方法中手动校验,或者通过 Commons validator的扩展来校验。 同一个类可以有不同的校验内容,但不能校验子对象 Struts2支持通过 validate方法和Xwok校验框架来进行校验。ⅪWork校验框架使用为属性类类型定义的 刘长炯著
MyEclipse 6 Java 开发中文教程 5 刘长炯著 个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。 Servlet 依赖 Struts1.x 的 Action 类依赖于 Servlet API , 当 Action 被调用时,以 HttpServletRequest 和 HttpServletResponse 作为参数传给 execute 方法。 Struts2 的 Action 和容器无关。Servlet 上下文被表现为简单的 Maps,允许 Action 被独立的测试。Struts2 的 Action 可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问 HttpServletRequest 或 HttpServletResponse。 易测性 测试 Struts1.x 的主要问题是 execute 方法暴露了 Servlet API 这使得测试要依赖于容器)。第三方的扩展, 如 Struts TestCase,提供了一套 Struts1 的模拟对象(来进行测试)。 Struts2 的 Action 可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。 捕获输入 Struts1.x 使用 ActionForm 对象来捕获输入。象 Action 一样,所有的 ActionForm 必须扩展基类。因为其他 的 JavaBean 不能作为 ActionForm 使用,开发者经常创建多余的类来捕获输入。DynaBeans 可以被用来 作为替代 ActionForm 的类来创建。但是,开发者可能是在重新描述(创建)已经存在的 JavaBean(仍然会 导致有冗余的 javabean)。 Struts2 直接使用 Action 属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子) 属性的 rich 对象类型。Action 属性能够通过 web 页面上的 taglibs 访问。Struts2 也支持 ActionForm 模式。 rich 对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了 taglib 对 POJO 输 入对象的引用。 表达式语言 Struts1.x 整合 JSTL,所以它使用 JSTL 的表达式语言。表达式语言有基本的图形对象移动,但是对集合和 索引属性的支持很弱。 Struts2 使用 JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL)。 将值绑定到页面 Struts1.x 使用标准 JSP 机制来绑定对象到页面上下文。 Struts2 使用“ValueStack”技术,使 taglib 能够访问值而不需要把你的页面(view)和对象绑定起来。 ValueStack 策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 类型转换 Struts1.x 的 ActionForm 属性经常都是 String。Struts 1.x 使用 Commons-Beanutils 来进行类型转换。转换 每一个类,而不是为每一个实例配置。 Struts2 使用 OGNL 进行类型转换。提供基本和常用对象的转换器。 验证 Struts1.x 支持在 ActionForm 的 validate 方法中手动校验,或者通过 Commons Validator 的扩展来校验。 同一个类可以有不同的校验内容,但不能校验子对象。 Struts2 支持通过 validate 方法和 XWork 校验框架来进行校验。XWork 校验框架使用为属性类类型定义的
MyEclipse6Java开发中文教程 校验和内容校验,来支持 chain校验子属性 Action执行控制 Sus1x支持每一个模块有单独的 Request Processors(生命周期),但是模块中的所有 Action必须共享 相同的生命周期 Struts2支持通过拦截器堆栈( Interceptor Stacks)为每一个 Action创建不同的生命周期。堆栈能够根据需 要和不同的Acon一起使用 但是比较遗憾的是,目前MyEc|ipse6对Suts2的开发还没有提供任何直接的支持, 所以本章我们将不得不手工加入相关的jar文件来开发,不过您会发现相比较Suts1来说 其开发过程要简单的多。 122下载 Struts2开发包 要学习 Struts的话,可以访问其官方网站htp/ /struts. apache. org2x,或者从网站 htto/ struts. apache. oral进去后点击 Struts2的链接进入,另外还可以阅读以Wk形式组织 的在线文档库http://cwiki.apache.org/s42WK。当然网站都是由参与者自愿维护的,所以 很多资料并不是特别的新,有时候可能还有错误。 由于 MyEclipse6自身不带 Struts2的类库,因此我们必须手工下载它。在浏览器中键 入地址htto/ struts. apache. org/download cqi,即可进入 Struts的下载页面,如图121所 示。值得注意的是在这个页面中同时包含 Struts1和2的下载包,显示在页面上方的是 Struts 2,目前版本是20112下方的是Sus1,自前版本是1.38。先来简要看看2的下载包有 哪些内容, Full Releases StRuts 2.0.11 ache Struts 2 is an elegant, extensible framework for creating ent Available in a full distribution, or as separate lbrary, source, example is the best avadlable" version of struts Full Dis tribution: o struts-2011-all. zip(86mb)[PGP] [MD5 Example Applications o struts-2.0.11-apps zip(22mb)[PGP] [MD5] s-2.0.11-docs zip(55mb)[PGP] [MD5] Alternative 322.0.11-j4 zip(3mb)tPGP)[MD51 Struts 1.3.8 Struts 1.3.8 is the latest production release of struts 1. It is availat 图121 Struts下载页面 如图中所示,它的下载包分很多类型。先来看完整包( Full distribution),大小为86MB 文件名是 struts-20.11-azj。这个包比较完整,然而个头也非常大,内容包括了下面5个 刘长炯著
MyEclipse 6 Java 开发中文教程 6 刘长炯著 校验和内容校验,来支持 chain 校验子属性 Action 执行控制 Struts1.x 支持每一个模块有单独的 Request Processors(生命周期),但是模块中的所有 Action 必须共享 相同的生命周期。 Struts2 支持通过拦截器堆栈(Interceptor Stacks)为每一个 Action 创建不同的生命周期。堆栈能够根据需 要和不同的 Action 一起使用。 但是比较遗憾的是,目前 MyEclipse 6 对 Struts 2 的开发还没有提供任何直接的支持, 所以本章我们将不得不手工加入相关的 jar 文件来开发,不过您会发现相比较 Struts 1 来说, 其开发过程要简单的多。 12.2 下载 Struts 2 开发包 要学习Struts的话,可以访问其官方网站 http://struts.apache.org/2.x/ ,或者从网站 http://struts.apache.org/ 进去后点击Struts2 的链接进入,另外还可以阅读以Wiki形式组织 的在线文档库 http://cwiki.apache.org/S2WIKI/。当然网站都是由参与者自愿维护的,所以 很多资料并不是特别的新,有时候可能还有错误。 由于MyEclipse 6 自身不带Struts 2 的类库,因此我们必须手工下载它。在浏览器中键 入地址 http://struts.apache.org/download.cgi,即可进入Struts 的下载页面,如图 12.1 所 示。值得注意的是在这个页面中同时包含Struts 1 和 2 的下载包,显示在页面上方的是Struts 2,目前版本是 2.0.11;下方的是Struts 1,目前版本是 1.3.8。先来简要看看 2 的下载包有 哪些内容。 图 12.1 Struts 下载页面 如图中所示,它的下载包分很多类型。先来看完整包(Full Distribution),大小为 86MB, 文件名是 struts-2.0.11-all.zip。这个包比较完整,然而个头也非常大,内容包括了下面 5 个
MyEclipse6Java开发中文教程 下载包中的全部内容。下载此包后解压缩可以看到在父目录Suts-2.0.11下包含以下几个子 目录: apps包含了四个war包形式的示例应用,附带有源码,读者可以发布到 Tomcat下,也 可阅读源码学习。 dcs包含了 javadoc,以及在线文档的离线版本,可以双击 index html开始阅读,点击 页面上的链接即可依次浏览全部内容,包括AUAX,文件上传等等。 包括了用于JDK14版本下的核心类库以及转换工具 ib包括了Sus2的全部核心类库和依赖包 src 代码目录 表121完整包目录介绍 。如果读者条件充分的话,例如用的是宽带,强烈建议直接下载这个包来使用,内容较全。 完整包下面的是示例应用( Example Applications),大小为22MB,文件名是 struts-20.1-apps.zj。它包含了上面完整包的aps目录下的四个wa示例应用,它们是 struts2-blank-2.0. 11. war, struts2-mailreader-2011.war, struts2-portlet-20 11.war struts2 showcase-20.11war第一个是精简的示例应用,大小为326MB,包括 Helloworld 和表单验证等例子,可以作为学习的入门例子。第二个乃是邮件阅读器的示例。第三个是门 户( Portlet)的例子。第四个则是展示例子,里面列出了儿乎所有 Struts2所支持的功能的 示例,包括 actionchaining,ajax,chat, filedownload, fileupload,jsf, modelDriven 再接下来是空应用( Blank Application Only),大小为3MB,文件名是 struts2- blank-20.11war,这个文件同时也包含在前两个发行包里面了。它包含了核心精简 过的Sus2空应用模版,在它的包的 WEB-INFnib目录下包含了下面几个jar文件 commons-logging-1.0. 4. jar freemarker-2.3.8. jar, ogn/-26 11.jar stu2coe20.11ar和 work204jar。如果再配合上 Spring的库文件以及 WebWork的 插件文件stus2- spang- plugin-20.11Jar,就可以进行两者的整合开发了。那么,在本章呢, 我们就是基于这个例子再加上刚提到的 Spring插件jar文件来进行示例应用的开发。在这里 我们简要的介绍一下这5个jar文件的用途 struts2-core-2.0 11 jar Struts2的核心包 work -2.0. 4 XWok2库, Struts2核心包作为底层库存在 ogn/-2611 jar Object Graph Navigation Language(OGNL),类似于EL 表达式的一种用于访问对象的表达式语言 freemarker-2. 3.8. jar Struts2所有的u标记的模板均使用 freemarker编写,可 通过修改或重写模板使 struts2的u标记按用户的需要进行 commons-logging-104jar| Apache的 Commons Loggin包,封装了通用的日志接口 可自动调用Log4J或者JDK14或者更高版本的 util. logging日志包 再往下是基础依赖类库( Essential Dependencies Only),大小为4MB,文件名是 stus2.011-ib,zjp,其中的文件是和完整包中的仇b目录下的所有文件相同的。它包含了 Struts2的所有核心和插件类库,读者如果是要进行完整应用的开发,建议把这个目录下的 所有jar文件放到Web应用的 WEB-NFlN目录下,这样比较保险。 最后剩下的分别是文档( Documentation),对应完整包的docs目录:源代码( Source) 刘长炯著
MyEclipse 6 Java 开发中文教程 7 刘长炯著 下载包中的全部内容。下载此包后解压缩可以看到在父目录 struts-2.0.11 下包含以下几个子 目录: apps 包含了四个 war 包形式的示例应用,附带有源码,读者可以发布到 Tomcat 下,也 可阅读源码学习。 docs 包含了 javadoc,以及在线文档的离线版本,可以双击 index.html 开始阅读,点击 页面上的链接即可依次浏览全部内容,包括 AJAX,文件上传等等。 j4 包括了用于 JDK 1.4 版本下的核心类库以及转换工具 lib 包括了 Struts2 的全部核心类库和依赖包 src 源代码目录 表 12.1 完整包目录介绍 。如果读者条件充分的话,例如用的是宽带,强烈建议直接下载这个包来使用,内容较全。 完整包下面的是示例应用(Example Applications),大小为 22MB,文件名是 struts-2.0.11-apps.zip。它包含了上面完整包的 apps 目录下的四个 war 示例应用,它们是: struts2-blank-2.0.11.war , struts2-mailreader-2.0.11.war , struts2-portlet-2.0.11.war , struts2-showcase-2.0.11.war。第一个是精简的示例应用,大小为 3.26 MB,包括 HelloWorld 和表单验证等例子,可以作为学习的入门例子。第二个乃是邮件阅读器的示例。第三个是门 户(Portlet)的例子。第四个则是展示例子,里面列出了几乎所有 Struts 2 所支持的功能的 示例,包括 actionchaining,ajax,chat,filedownload,fileupload,jsf,modelDriven 等 等。 再接下来是 空应用( Blank Application Only ),大小为 3MB ,文件名是 struts2-blank-2.0.11.war,这个文件同时也包含在前两个发行包里面了。它包含了核心精简 过的 Struts 2 空应用模版,在它的包的 WEB-INF/lib 目录下包含了下面几个 jar 文件: commons-logging-1.0.4.jar , freemarker-2.3.8.jar , ognl-2.6.11.jar , struts2-core-2.0.11.jar 和 xwork-2.0.4.jar。如果再配合上 Spring 的库文件以及 WebWork 的 插件文件 struts2-spring-plugin-2.0.11.jar,就可以进行两者的整合开发了。那么,在本章呢, 我们就是基于这个例子再加上刚提到的Spring插件jar文件来进行示例应用的开发。在这里, 我们简要的介绍一下这 5 个 jar 文件的用途: struts2-core-2.0.11.jar Struts2 的核心包 xwork-2.0.4.jar XWork 2 库,Struts2 核心包作为底层库存在 ognl-2.6.11.jar Object Graph Navigation Language (OGNL), 类似于 EL 表达式的一种用于访问对象的表达式语言 freemarker-2.3.8.jar Struts2 所有的 ui 标记的模板均使用 freemarker 编写,可 通过修改或重写模板使struts2的ui标记按用户的需要进行 显示 commons-logging-1.0.4.jar Apache 的 Commons Loggin 包,封装了通用的日志接口, 可自动调用 Log4J 或 者 JDK 1.4 或者更高版本的 util.logging 日志包 。 再往下是基础依赖类库(Essential Dependencies Only),大小为 4MB,文件名是 struts-2.0.11-lib.zip,其中的文件是和完整包中的 lib 目录下的所有文件相同的。它包含了 Struts 2 的所有核心和插件类库,读者如果是要进行完整应用的开发,建议把这个目录下的 所有 jar 文件放到 Web 应用的 WEB-INF/lib 目录下,这样比较保险。 最后剩下的分别是文档(Documentation),对应完整包的docs目录;源代码(Source)
MyEclipse6Jaa开发中文教程 对应完整包的Sc目录;可选的JDK14版本的JAR文件( Alternative Java4JARs), 对应完整包的4目录。 那么对于我们开发人员来说,如果手头已经有了 Struts2的参考资料,或者说对如何开 发已经很熟悉,可以直接下载基础依赖类库( Essential Dependencies Only),那么初学 者呢,如果网络不是太快,可以再加上下载空应用( Blank Application Only)即可,如果 希望深入全面的学习,还是下载个头最大的完整包( Full distribution)。 123开发第一个 Struts2应用 本节我们将进行简单的 HelloWorld的开发,以及基于POJO的 HelloWorld开发,自定 义 Action方法和通配符,接着我们将第九章的登录示例 StrutsLogin Demo用Sus2改写 并加入验证机制和国际化消息 1231准备工作 我们需要在 MyEclipse中创建一个新的Web项目,并向它添加必要的 Struts2类库 和配置文件。现在我们来创建一个名为 struts2heo的Web项目。选择菜单Fie>New> Web Project,可以启动创建Web项目的向导,如图83所示。在弹出的对话框的 Project Name中输入 struts2heo,然后选中J2 EE Specification Leve下面的 Java ee50单选 钮,最后点击 Finish按钮就可以创建好这个Web项目了。 项目创建完之后,我们需要给它加入 Struts2的类库。读者可以参考121节的内容下 载或者从完整包找到文件 struts2- blank-2.0.1.war,接着用Wnz|P或者 WinRAR等解压缩 软件解开它到电脑的硬盘上,然后将解出的 WEB-NFNib目录下的5个文件复制到当 前Web项目的 WebrooteB-NF№ib下,具体的做法希望大家还记得:首先切换到 Windows的文件浏览器中选中这5个解压缩出来的j间ar文件,然后按下快捷键ctr+C将它 们复制到剪贴板上,然后我们再切换到 MyEclipse的窗口,点击鼠标左键选中 Package Explorer视图下的sus2heo项目的目录节点 WebrooteB-NFnib,之后按下快捷键 ctrH+V,稍后这些jar文件就会被 MyEclipse加入到项目的 Build path中,会出现在项目的 节点 Referenced libraries之下。 那么接下米我们还需要做两件事:添加过滤器和默认配置文件。我们还记得以前的 Struts1是在 web. xm添加 action servlet的方式来工作的,但是 Struts2则是需要注册 个 Filter Dispatcher,这个 Filter拦截所有的请求(")使得Sus2框架为您服务,当然默认 条件下我们也可以只过滤 action下的请求来使之工作。那么现在就打开文件 web.x(在 我们的项目中,它位于 Webroot eB-NF/下),按照粗斜体部分代码将过滤器加入到配置 文件中,完整代码如下所示: struts 2 刘长炯著
MyEclipse 6 Java 开发中文教程 8 刘长炯著 对应完整包的 src 目录;可选的 JDK 1.4 版本的 JAR 文件(Alternative Java 4 JARs), 对应完整包的 j4 目录。 那么对于我们开发人员来说,如果手头已经有了 Struts 2 的参考资料,或者说对如何开 发已经很熟悉,可以直接下载基础依赖类库(Essential Dependencies Only),那么初学 者呢,如果网络不是太快,可以再加上下载空应用(Blank Application Only)即可,如果 希望深入全面的学习,还是下载个头最大的完整包(Full Distribution)。 12.3 开发第一个 Struts 2 应用 本节我们将进行简单的 HelloWorld 的开发,以及基于 POJO 的 HelloWorld 开发,自定 义 Action 方法和通配符,接着我们将第九章的登录示例 StrutsLoginDemo 用 Struts2 改写, 并加入验证机制和国际化消息。 12.3.1 准备工作 我们需要在 MyEclipse 中创建一个新的 Web 项目,并向它添加必要的 Struts 2 类库 和配置文件。现在我们来创建一个名为 struts2hello 的 Web 项目。选择菜单 File > New > Web Project,可以启动创建 Web 项目的向导,如图 8.3 所示。在弹出的对话框的 Project Name 中输入 struts2hello,然后选中 J2EE Specification Level 下面的 Java EE 5.0 单选 钮,最后点击 Finish 按钮就可以创建好这个 Web 项目了。 项目创建完之后,我们需要给它加入 Struts 2 的类库。读者可以参考 12.1 节的内容下 载或者从完整包找到文件 struts2-blank-2.0.11.war,接着用 WinZIP 或者 WinRAR 等解压缩 软件解开它到电脑的硬盘上,然后将解出来的 WEB-INF/lib 目录下的 5 个 jar 文件复制到当 前 Web 项目的 WebRoot/WEB-INF/lib 下,具体的做法希望大家还记得:首先切换到 Windows 的文件浏览器中选中这 5 个解压缩出来的 jar 文件,然后按下快捷键 Ctrl+C 将它 们复制到剪贴板上,然后我们再切换到 MyEclipse 的窗口,点击鼠标左键选中 Package Explorer 视图下的 struts2hello 项目的目录节点 WebRoot/WEB-INF/lib,之后按下快捷键 Ctrl+V,稍后这些 jar 文件就会被 MyEclipse 加入到项目的 Build Path 中,会出现在项目的 节点 Referenced Libraries 之下。 那么接下来我们还需要做两件事:添加过滤器和默认配置文件。我们还记得以前的 Struts 1 是在 web.xml 添加 action servlet 的方式来工作的,但是 Struts 2 则是需要注册一 个 FilterDispatcher,这个 Filter 拦截所有的请求(/*)使得 Struts 2 框架为您服务,当然默认 条件下我们也可以只过滤*.action 下的请求来使之工作。那么现在就打开文件 web.xml(在 我们的项目中,它位于 WebRoot/WEB-INF/下),按照粗斜体部分代码将过滤器加入到配置 文件中,完整代码如下所示: struts2
MyEclipse6Java开发中文教程 org. apache struts2 dispatcher. FilterDispatcher chiller struts 2 / index. jsp 如我们所讨论过的,在这里默认条件下,您也可以把修改为 .action 接下来做什么呢?以前的 Struts1的开发,是要在 Web rooteD-NF目录下创建配 置文件 struts- config. Xm,那么现在 Struts2的开发呢,也需要一个类似的配置文件的,所 不同的是它需要建在项目的Src目录下,名为 struts. xml,当项目发布以后,这个文件将会 被复制到WEB- INF/classes下。那么在sr目录上点击右键,选择菜单New>File,接着 在弹出对话框中的 File name右侧输入框中输入文件名 struts:xm,点击 Finish按钮关闭 对话框后,即可打开这个这个空的 struts. xml文件。然后我们把它的源代码修改为如下所 ,它为我们的应用程序提供了大量的默认配置,Stus 刘长炯著
MyEclipse 6 Java 开发中文教程 9 刘长炯著 org.apache.struts2.dispatcher.FilterDispatcher struts2 /* index.jsp 一如我们所讨论过的,在这里默认条件下,您也可以把/*修改为 *.action。 接下来做什么呢?以前的 Struts 1 的开发,是要在 WebRoot/WEB-INF/目录下创建配 置文件 struts-config.xml,那么现在 Struts 2 的开发呢,也需要一个类似的配置文件的,所 不同的是它需要建在项目的 src 目录下,名为 struts.xml,当项目发布以后,这个文件将会 被复制到 WEB-INF/classes 下。那么在 src 目录上点击右键,选择菜单 New > File,接着 在弹出对话框中的 File name 右侧输入框中输入文件名 struts.xml,点击 Finish 按钮关闭 对话框后,即可打开这个这个空的 struts.xml 文件。然后我们把它的源代码修改为如下所 示: 。读者可以用复制粘贴将这些代码导入到编辑器中,无需再一一敲入了。我们可以注意到这 个配置文件中出现了 package,它类似于 Java 中的对象(注意和 Java 的 package 的相似 之处除了可以包含多个文件,或者说定义之外,没有其它类似点,因为 Java 中的包是不可 继承的),其实就是可以将 Action 分类,划分到不同的 package 中,更主要的是这些包之间 可以互相继承,包括拦截器,action 映射等等都可以继承。举个例子,我们写了个通用的登 录定义,那么另一个 action 就可以继承它。在这里可以看到 extends="struts-default",这是 个继承,那么继承的这个包定义在哪里呢?打开文件 WEB-INF/lib/struts2-core-2.0.11.jar 文件包里根目录下有个 struts-default.xml 文件里面定义了一个包: ,它为我们的应用程序提供了大量的默认配置,Strus
MyEclipse6Java开发中文教程 2解析配置文件的时候,会自动从类路径的根目录下依次先加载 struts- default xm里面的包 定义,再解析我们自己编写的 struts. xn。在稍后我们编写第一个 HelloWorld示例的时候, 还会继续深入的讨论 package和 action的定义方式 另外, Struts2还支持多个配置文件的定义方式,这在实际开发中,便于程序员分开维 护,例如会将用户管理相关的模块写入 userxm。这个文件的内容和上面的默认 struts. xml 的格式是一样的,包括头定义。这个文件,同样也放在src目录的根下面,或者放在src下 的某个子目录。最后呢,我们需要把它使用 include指令加入到默认的 struts.xm文件里 面即可。下面是一个 struts. xml的示例 ?xml vers 0"encoding=UTF-8 ?> !--在这里添加 Action定义--> 。当然在这种情况下,开发人员可以无需在主配置文件中加入任何 package定义了。这也 是Sts2的一个特点,配置文件可大可小分割 注意:读者对此先做了解即可,在我们的例子中不做这方面的展示了,读者在阅读 Struts 自带例子的时候可能会看到这个指令 至此为止,读者已经搭建好了 Struts2的开发环境了。 1232开发 Helloworld 现在介绍了这么多的准备知识,大家可能已经迫不及待的想要亲自做一个例子跑一下感 受了。OK,现在我们就来开发一个最简单的 HelloWorld例子。 首先,新建Java类文件 example HelloWorld。选择菜单Fie>New>cass,或者点 击工具栏土的按钮,在打开的新建类的对话框中,输入 Package为 example,Name 为 Helloworld,点击 Finish按钮后即可将此类创建。现在我们将其代码修改为如下所示: package examplei import com. opensymphony xwork2. ActionSupport public class HelloWorld extends ActionSupport t public String execute() throws Exception I setMessage("你好! struts2!") return SUCCESS 刘长炯著
MyEclipse 6 Java 开发中文教程 10 刘长炯著 2 解析配置文件的时候,会自动从类路径的根目录下依次先加载 struts-default.xml 里面的包 定义,再解析我们自己编写的 struts.xml。在稍后我们编写第一个 HelloWorld 示例的时候, 还会继续深入的讨论 package 和 action 的定义方式。 另外,Struts 2 还支持多个配置文件的定义方式,这在实际开发中,便于程序员分开维 护,例如会将用户管理相关的模块写入 user.xml。这个文件的内容和上面的默认 struts.xml 的格式是一样的,包括头定义。这个文件,同样也放在 src 目录的根下面,或者放在 src 下 的某个子目录。最后呢,我们需要把它使用 include 指令加入到默认的 struts.xml 文件里 面即可。下面是一个 struts.xml 的示例: 。当然在这种情况下,开发人员可以无需在主配置文件中加入任何 package 定义了。这也 是 Struts 2 的一个特点,配置文件可大可小分割。 注意:读者对此先做了解即可,在我们的例子中不做这方面的展示了,读者在阅读 Struts 自带例子的时候可能会看到这个指令。 至此为止,读者已经搭建好了 Struts 2 的开发环境了。 12.3.2 开发 HelloWorld 现在介绍了这么多的准备知识,大家可能已经迫不及待的想要亲自做一个例子跑一下感 受了。OK,现在我们就来开发一个最简单的 HelloWorld 例子。 首先,新建 Java 类文件 example.HelloWorld。选择菜单 File > New > Class,或者点 击工具栏上的 按钮,在打开的新建类的对话框中,输入 Package 为 example,Name 为 HelloWorld,点击 Finish 按钮后即可将此类创建。现在我们将其代码修改为如下所示: package example; import com.opensymphony.xwork2.ActionSupport; public class HelloWorld extends ActionSupport { public String execute() throws Exception { setMessage("你好!Struts 2!"); return SUCCESS; }