jakartastruts:运用Jakarta Struts的 7大实战心法

  编者按:当作者 Chuck Cavaness(著有Programming Jakarta Struts书)所在网络公司决定采用Struts框架的后Chuck曾经花费了好几个月来研究如何用它来构建公司应用系统本文叙述正是作者在运用Struts过程中来的不易若干经验和心得体会如果你是个负责通过jsp和servlet开发Web应用Java并且也正在考虑采用基于Struts构建思路方法那么你会在这里发现很多颇有见地同时也很有价值信息

  1. 只在必要时候才考虑扩展Struts框架

  个好framework有很多优点首先它必须能够满足用户可预见需求为此 Struts为Web 应用提供了个通用架构这样开发人员可以把精力集中在如何解决实际业务问题上其次个好framework还必须能够在适当地方提供扩展接口以便应用能扩展该框架来更好适应使用者实际需要

  如果Struts framework在任何场合任何项目中都能很好满足需求那真是太棒了但是实际上没有个框架声称能做到这定会有些特定应用需求是框架开发者们无法预见到因此最好办法就是提供足够扩展接口使得开发工程师能够调整struts来更好符合他们特殊要求

  在Struts framework中有很多地方可供扩展和定制几乎所有配置类都能被替换为某个用户定制版本这只要简单修改下Struts配置文件就可以做到

  其他组件如ActionServlet和 RequestProcessor 也能用自定义版本代替. 甚至连Struts 1.1里才有新特性也是按照扩展原则来设计例如在异常处理机制中就允许用户定制异常处理句柄以便更好对应用系统发生做出响应

  作为框架这种可调整特性在它更适合你应用同时也在很大程度上影响了项目开发效果首先由于您应用是基于个现有成熟、稳定framework如Struts测试过程中发现数量将会大大减少同时也能缩短开发时间和减少资源投入你不再需要投入开发力量用于编写基础框架代码了

  然而, 实现更多功能是要花费更大代价我们必须小心避免不必要滥用扩展性能 Struts是由核心包加上很多工具包构成它们已经提供了很多已经实现功能因此不要盲目扩展Struts框架要先确定能不能采用其他思路方法使用现有功能来实现 在决定编写扩展代码前务必要确认Struts确没有实现你要功能否则重复功能会导致混乱将来还得花费额外精力清除它

  2. 使用异常处理声明

  要定义应用逻辑流程成熟经验是推荐在代码的外用配置思路方法来实现而不是写死在代码中在J2EE中这样例子比比皆是从实现EJB安全性和事务性行为到描述JMS消息和目地的间关系很多运行时处理流程都是可以在的外定义

  Struts 创建者从开始就采用这种思路方法通过配置Struts配置文件来定制应用系统运行时各个方面点在版本1.1新特性上得到延续包括新异常处理功能在Struts framework以前版本中开发人员不得不自己处理Struts应用中发生情况在最新版本中情况大大改观了Struts Framework提供了内置个称为 ExceptionHandler 用于系统缺省处理action类运行中产生这也是在上个窍门技巧中我们提到framework许多可扩展接口的

  Struts缺省 ExceptionHandler类会生成个ActionError对象并保存在适当范围(scope)对象中这样就允许JSP页面使用类来提醒用户出现什么问题如果你认为这不能满足你需求那么可以很方便实现你自己ExcepionHandler类

  具体定制异常处理思路方法和机制

  要定制自己异常处理机制步是继承org.apache.struts.action.ExceptionHandler类这个类有2个思路方法可以覆盖个是excute另外个是storeException. 在多数情况下只需要覆盖其中excute思路方法下面是ExceptionHandler类excute思路方法声明:

  正如你看到该思路方法有好几个参数其中包括原始异常思路方法返回个ActionForward对象用于异常处理结束后将controller类带到请求必须转发地方去

  当然您可以实现任何处理般而言我们必须检查抛出异常,并针对该类型异常进行特定处理缺省系统异常处理功能是创建个出错信息同时把请求转发到配置文件中指定地方去 定制异常处理个常见例子是处理嵌套异常假设该异常包含有嵌套异常这些嵌套异常又包含了其他异常因此我们必须覆盖原来execute思路方法对每个异常编写出错信息

  旦你创建了自己ExceptionHandler 类就应该在Struts配置文件中部分声明这个类以便让Struts知道改用你自定义异常处理取代缺省异常处理.

  可以配置你自己ExceptionHandler 类是用于Action Mapping特定部分还是所有Action对象如果是用于Action Mapping特定部分就在<action>元素中配置如果想让这个类可用于所有Action对象,可以在<global-sections> 元素中指定例如假设我们创建了异常处理类CustomizedExceptionHandler用于所有Action类, <global-exceptions>元素定义如下所示:

  在<exception />元素中可以对很多属性进行设置在本文中最重要属性莫过于handler属性, handler属性值就是自定义继承了ExceptionHandler类子类全名 假如该属性没有定义Struts会采用自己缺省值当然其他属性也很重要但如果想覆盖缺省异常处理handler无疑是最重要属性

  最后必须指出点是你可以有区别异常处理类来处理区别异常在上面例子中CustomizedExceptionHandler用来处理任何java.lang.Exception子类. 其实你也可以定义多个异常处理类个专门处理区别异常树下面XML片断解释了如何配置以实现这

  在这里旦有异常抛出struts framework将试图在配置文件中找到ExceptionHandler如果没有找到那么struts将沿着该异常父类链层层往上找直到发现匹配为止因此我们可以定义个层次型异常处理关系结构在配置文件中已经体现了这

  3. 使用应用模块(Application Modules)

  Struts 1.1个新特性是应用模块概念应用模块允许将单个Struts应用划分成几个模块每个模块有自己Struts配置文件JSP页面Action等等这个新特性是为了解决大中型开发队伍抱怨最多个问题即为了更好支持并行开发允许多个配置文件而不是单个配置文件

  注:在早期beta版本中该特性被称为子应用(sub-applications)最近改名目是为了更多地反映它们在逻辑上分工

  显然当很多开发人员起参加个项目时单个Struts配置文件很容易引起资源冲突应用模块允许Struts按照功能要求进行划分许多情况已经证明这样更贴近实际例如假设我们要开发个典型商店应用可以将组成部分划分成模块比如catalog(商品目录), customer(顾客), customer service(顾客服务), order(订单)等每个模块可以分布到区别目录下这样各部分资源很容易定位有助于开发和部署图1 显示了该应用目录结构

  图 1. 个典型商店应用目录结构

  
  由于值存放在个Map对象所以要记得对get思路方法返回Object对象做强制性类型转换

  DynaActionForm有好几个很有用子类其中最重要是DynaValidatorForm 这个动态ActionForm和Validator 起利用公共Validator包来提供自动验证这个特性使你得以在代码的外指定验证规则将两个特性结合使用对开发人员来说将非常有吸引力

  7. 使用可视化工具

  自从Struts 1.0 分布以来就出现了不少可视化工具用于协助创建修改和维护Struts配置文件配置文件本身是基于XML格式在大中型开发应用中会增大变得很笨拙为了更方便管理这些文件旦文件大到你无法目了然时候建议试着采用其中种GUI 工具协助开发商业性和开放源代码工具都有不少表1列出了可用工具和其相关链接从那里可以获取更多信息

  表 1. Struts GUI 工具

  应用 性质 网址

  Adalon 商业软件Software http://www.synthis.com/products/adalon

  Easy Struts 开放源码 http://easystruts.sourceforge.net/

  Struts Console 免费 http://www.jamesholmes.com/struts/console

  JForms 商业软件Software http://www.solanasoft.com/

  Camino 商业软件Software http://www.scioworks.com/scioworks_camino.html

  Struts Builder 开放源码 http://sourceforge.net/projects/rivernorth/



  StrutsGUI 免费 http://www.alien-factory.co.uk/struts/struts-index.html

  相关资源

  要获取更为全面Struts GUI 工具列表 (包括免费和商业性), 请访问 Struts resource page.



Tags:  jakartacommons jakartatomcat jakarta jakartastruts

延伸阅读

最新评论

发表评论