搭建Struts2开发环境

名Webwork2在各自经历几年发展的后Struts和WebWork社区决定合
2为也就是今天Struts2
  Struts是个基于Model2MVC框架为应用WEB层提供了良好结构严谨实现Struts发展较早早期Struts1.X已
被很多J2EE员熟悉经过多年来发展这支队伍变得越来越大很多企业级应用都是基于Struts开发
  Struts2和Struts1.X已经不能再放到起比较虽然都是对MVC架构模式实现本质却完全区别Struts2前身是
WebWork其实现方式和功能都要优于Struts1.X,但是Struts先入为主很多应用都基于Struts其生命力和普及度
使得WebWork落于下风随着新思想和新架构不断涌入特别是WEB2.0被大量提及Struts1.x显然无法跟上日新月
异变化在很多应用上显得力不从心最终催生了Struts2.0可以说Struts2.0是为变而变
  很大程度上Struts2.0无法避开投机取巧嫌疑不过借助Struts名声加上WebWork构建良好框架 2者取长补短
确实不失为种黄金组合和种绝佳宣传方式
  笔者杜撰此文时可以下载到最新版本为2.1.0但他魅力已初露尖角应该会有很好前途
  Struts2新特征
如果读者熟悉Struts1.X会发现Struts2比Struts1.X有了巨大变化:

 

Action 类:
  • Struts1要求Action类继承个抽象基类Struts1个普遍问题是使用抽象类编程而不是接口
  • Struts 2 Action类可以实现个Action接口也可实现其他接口使可选和定制服务成为可能Struts2提供个
ActionSupport基类去实现常用接口Action接口不是必须任何有execute标识POJO对象都可以用作
Struts2Action对象
  线程模式:
  • Struts1 Action是单例模式并且必须是线程安全仅有Action个例子来处理所有请求单例策略限制了
Struts1 Action能作事并且要在开发时特别小心Action资源必须是线程安全或同步
  • Struts2 Action对象为每个请求产生个例子因此没有线程安全问题(实际上servlet容器给每个请求产生许
多可丢弃对象并且不会导致性能和垃圾回收问题)
  Servlet 依赖: 
  • Struts1 Action 依赖于Servlet API ,当个Action被时HttpServletRequest 和 HttpServletResponse 被
传递给execute思路方法
  • Struts 2 Action不依赖于容器允许Action脱离容器单独被测试如果需要Struts2 Action仍然可以访问
request和response但是其他元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse必要

  可测性:
  • 测试Struts1 Action个主要问题是execute思路方法暴露了servlet API(这使得测试要依赖于容器)个第
3方扩展--Struts TestCase--提供了套Struts1模拟对象(来进行测试)
  • Struts 2 Action可以通过化、设置属性、思路方法来测试“依赖注入”支持也使测试更容易
  捕获输入:
  • Struts1 使用ActionForm对象捕获输入所有ActionForm必须继承个基类其他JavaBean不能用作
ActionForm开发者经常创建多余类捕获输入动态Bean(DynaBeans)可以作为创建传统ActionForm选择但是开

 

发者可能是在重新描述(创建)已经存在JavaBean(仍然会导致有冗余javabean)
  • Struts 2直接使用Action属性作为输入属性消除了对第 2个输入对象需求输入属性可能是有自己(子)属性
rich对象类型Action属性能够通过web页面上taglibs访问Struts2也支持ActionForm模式rich对象类型包括业
务对象能够用作输入/输出对象这种ModelDriven 特性简化了taglib对POJO输入对象引用
  表达式语言:
  • Struts1 整合了JSTL因此使用JSTL EL这种EL有基本对象图遍历但是对集合和索引属性支持很弱
  • Struts2可以使用JSTL但是也支持个更强大和灵活表达式语言--"Object Graph Notation Language"
(OGNL).
  绑定值到页面(view):
  • Struts 1使用标准JSP机制把对象绑定到页面中来访问
  • Struts 2 使用 "ValueStack"技术使taglib能够访问值而不需要把你页面(view)和对象绑定起来
ValueStack策略允许通过系列名称相同但类型区别属性重用页面(view)
  类型转换:
  • Struts 1 ActionForm 属性通常都是String类型Struts1使用Commons-Beanutils进行类型转换每个类个
转换器对每个例子来说是不可配置
  • Struts2 使用OGNL进行类型转换提供基本和常用对象转换器
  校验: 
  • Struts 1支持在ActionFormvalidate思路方法中手动校验或者通过Commons Validator扩展来校验同个
类可以有区别校验内容但不能校验子对象
  • Struts2支持通过validate思路方法和XWork校验框架来进行校验XWork校验框架使用为属性类类型定义
校验和内容校验来支持chain校验子属性
  Action执行控制:

 • Struts1支持每个模块有单独Request Processors(生命周期)但是模块中所有Action必须共享相同生命周

  • Struts2支持通过拦截器堆栈(Interceptor Stacks)为每个Action创建区别生命周期堆栈能够根据需要和区
别Action起使用
  注:以上资料从网上搜集来源:Struts开发组翻译:tianxinet(胖猴)
  Struts2环境要求
    Apache Struts2环境需求如下:
  Servlet API 2.4
  JSP API 2.0
  Java 5
  需要提醒是在Struts中会用到Annotation所以请将JDK版本升级到1.5.
  Struts2环境搭建
4.1Struts下载   从游览器输入http://people.apache.org/builds/struts/即可看到Struts各个版本列表从下
图中可以发现现在Struts2.0最新版是2.1.0,发布于2007年10月29      
<!-- START SNIPPET: strutsDtd -->
<!--
  Struts configuration DTD.
  Use the following DOCTYPE
  <!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
-->
<!ELEMENT struts (package||bean|constant)*>
<!ELEMENT package (result-types?, erceptors?, default-erceptor-ref?, default-action-ref?, globalresults?,
global-exception-mappings?, action*)>
<!ATTLIST package
  name CDATA #REQUIRED
  extends CDATA #IMPLIED
   CDATA #IMPLIED
  abstract CDATA #IMPLIED
  externalReferenceResolver NMTOKEN #IMPLIED
>
<!ELEMENT result-types (result-type+)>
<!ELEMENT result-type (param*)>
<!ATTLIST result-type
  name CDATA #REQUIRED
   CDATA #REQUIRED
  default (true|false) "false"
>
<!ELEMENT erceptors (erceptor|erceptor-stack)+>
<!ELEMENT erceptor (param*)>
<!ATTLIST erceptor
  name CDATA #REQUIRED
   CDATA #REQUIRED
>
<!ELEMENT erceptor-stack (erceptor-ref+)>
<!ATTLIST erceptor-stack
  name CDATA #REQUIRED
>
<!ELEMENT erceptor-ref (param*)>
<!ATTLIST erceptor-ref
  name CDATA #REQUIRED
>
<!ELEMENT default-erceptor-ref (param*)>
<!ATTLIST default-erceptor-ref
  name CDATA #REQUIRED
>
<!ELEMENT default-action-ref (param*)>
<!ATTLIST default-action-ref
  name CDATA #REQUIRED
>
<!ELEMENT global-results (result+)>
<!ELEMENT global-exception-mappings (exception-mapping+)>
<!ELEMENT action (param|result|erceptor-ref|exception-mapping)*>
<!ATTLIST action
  name CDATA #REQUIRED
   CDATA #IMPLIED
  method CDATA #IMPLIED
  converter CDATA #IMPLIED
>
<!ELEMENT param (#PCDATA)>
<!ATTLIST param
  name CDATA #REQUIRED
>
<!ELEMENT result (#PCDATA|param)*>
<!ATTLIST result
  name CDATA #IMPLIED
  type CDATA #IMPLIED
>
<!ELEMENT exception-mapping (#PCDATA|param)*>
<!ATTLIST exception-mapping
  name CDATA #IMPLIED
  exception CDATA #REQUIRED
  result CDATA #REQUIRED
>
<!ELEMENT (#PCDATA)>
<!ATTLIST
  file CDATA #REQUIRED
>
<!ELEMENT bean (#PCDATA)>
<!ATTLIST bean
  type CDATA #IMPLIED
  name CDATA #IMPLIED
   CDATA #REQUIRED
  scope CDATA #IMPLIED
   CDATA #IMPLIED
  optional CDATA #IMPLIED
>
<!ELEMENT constant (#PCDATA)>
<!ATTLIST constant
  name CDATA #REQUIRED
  value CDATA #REQUIRED  
>
<!-- END SNIPPET: strutsDtd -->
  整理总结
    Struts是个时下非常流行并被许多企业级应用采用WEB框架Struts2在Struts1.x基础上进行了大量改造
和WebWork合 2为引进了更多新观念、新思想和新技术使的更符合J2EE应用开发需要
   “工欲善其事必先利其器”掌握两种开发工具能够大大提高编程效率也能增强开发者信心学习门新技术时
第个应用非常重要如果第个最简单运行不成功会使得学习者积极性大打折扣这也是笔者不愿意看到所以本章图
文并茂地详细介绍了Struts2应用开发过程并尽可能少提及陌生概念和术语

你可能感兴趣的:(bean,框架,struts,企业应用,Webwork)