你需要将一个已有的基于JSP的web 应用转换为Struts 的应用。
在加入新的功能到应用中时,可应用Struts采取重构的方式来进行。随着你对Struts 知识的增加,你可以将现有代码重新架构成使用Struts。如果没有计划对应用进行新的开发,就一次性重构现有的JSP代码。
迁移一个现有JSP应用的困难程度取决于应用的复杂度和架构的稳固性。如果应用使用Model 1 架构,所有的逻辑多包涵在JSP中,这的确是一个不小的挑战。你会发现你需要从头重新设计应用,以便在你开始重构之前分离业务逻辑和表现。
如果你新接触Struts,那么可以在一个新应用的开发中学习Struts而不是等到玩得很熟了才进行开发。Struts 不是在开发流程后端可以随便轻易就可以“开瓶即喝”的可乐。但是,有些项目却在开发过程中途变更项目的架构支撑。如果你处于这种情况,请掌握好你的项目计划,以便Struts 能够首先应用到新的开发中和适合的特征中,而不是在危急的道路之上。一旦你增长了你的Struts 功力,将使得转换现有代码更加容易。
为了使这更具体些,考虑一个有3个页面组成的简单例子。第一个页面是一个主要的欢迎页面,显示到第2个页面的链接。第二个页面显示两个表单输入字段。当用户提交表单时,所添加的值的结果显示在第3个页面上。
首先,Example 1-3 显示了提供输入页面链接的index.jsp页面。
Example 1-4 展示了提交输入值的get_input.jsp页面。
Example 1-4中的页面将表单提交给一个JSP 页面来显示结果。目标页面 (示于Example 1-6) 使用了一个JavaBean 来持有在请求中从表单接收的值。在看目标JSP代码之前,Example 1-5展示了存储数据的JavaBean 的代码。
display_result.jsp页面,示于Example 1-6, 使用JSP setProperty标签来通过请求值来组装bean。值的输出使用请求时表达式,而和的计算则使用一个scriptlet。最后,该计算出的总和被显示出来。
这个应用演示了一些很不受人欢迎的使用JSP的方式。虽然使用JavaBean 是值得赞扬的,计算却是在JSP中使用scriptlet来执行的。其结果是业务逻辑和表现混合在一起,scriptlets (内嵌的的Java 代码) 可能导致JSP应用的维护问题。
明确的说明转换这个应用到Struts 的策略是简单的。虽然这个例子微不足道,但所采用的策略却可适用于更加复杂的应用。应该尽可能的从JSP中去除内嵌的以scriptlet (<% %>)开始的Java 代码;如果可能还要去请求时表达式(<%= %>)。为了完成这个任务,Example 1-6中,将通过添加一个计算和返回总和的方法将和的计算移到了JavaBean (from Example 1-5) 中:
现在,修改JSP来使用bean:write标签:
这对这个小应用的前一版本来说是一个明显的改善。
在你进行进一步的修改之前,最好将应用重新构建并重新部署,看其是否仍然能工作。
下一步,将Struts 控制器整合进来,有更多一些的工作要做。首先,创建一个Struts Action,就象Example 1-7中所示的一样,它负责接收来自于get_input.jsp页面中的表单的值。提交的值将获取为Action整理到一个JavaBean中的请求参数。bean 实例被设置为一个servlet 请求属性。Action然后将请求转发到display_result.jsp页面。
在你的struts-config.xml中为Action 创建一个ActionMapping:
为了使用这个Action,需要修改get_input.jsp页面中的表单的目标action属性:
一旦你开发好了一个这样的新特征,从一个已有的JSP页面中连接到新的action 只需要简单的使用特定的ActionServlet mapping (e.g., *.do)。你也可以使用JSP的URL从Struts页面链接到现有的JSP页面。
第6.1式描述了如何为你的所有动作的公共行为创建一个基础action。
第9.1式详细描述了如何声明Struts的例外处理。
第5.6式讨论了集成现有的JavaBean 和Struts action forms的方式。
posted on 2005-04-29 10:14 铁手 阅读(2135) 评论(1) 编辑 收藏 所属分类: Java 、Struts系列