有没有人从Struts 1迁移到另一个Web框架?

时间:2020-03-06 14:20:00  来源:igfitidea点击:

在我当前的项目中,最近几年我们一直在使用Struts 1,并且……Struts正在显示其年龄。我们正在缓慢地将前端代码迁移到使用服务器中XML的Ajax客户端。我想知道你们中是否有人将旧的Struts应用程序迁移到其他框架,以及这样做面临的挑战。

解决方案

当然。从Struts迁移到AJAX框架是一种非常自由的体验。 (尽管我们使用JSON而不是XML。解析起来要容易得多。)但是,我们需要意识到,它实际上是对应用程序的完全重写。

代替用于MVC的经典数据库/ JSP / Actions方案,我们将发现自己转向Servlet / Javascript方案,该模型由HTTP GET请求表示,动作由POST / PUT / DELETE请求表示,视图通过网络浏览器即时呈现。这在每个领域都带来了有趣的挑战:

服务器端在服务器端,我们将需要开发一个将数据公开给客户端的标准。最简单,最简单的方法是采用最适合我们数据层次结构的REST方法。使用servlet实现起来非常简单,但是Sun还开发了Java 1.6方案,该方案使用了看起来很酷的属性。

服务器端的另一方面是选择传输协议。我知道我们已经提到过XML,但是我们可能需要重新考虑。 XML解析器在浏览器之间差异很大。一个浏览器可能使文档以第一个孩子为根,另一个浏览器可能会添加一个特殊的内容对象,并且它们对空格的解析都不同。更糟糕的是,主流浏览器似乎未正确实现normalize()函数。这意味着XML解析很容易被黑客入侵。

JSON解析起来更容易,结果也更加一致。 Javascript和Actionscript(Flash)都可以将JSON直接转换为对象。这使得访问数据成为x.y或者x [y]的简单问题。还有许多API可以处理所有可以想象的语言的JSON。因为它很容易解析,所以几乎比XML更受支持!

客户端我们将要遇到的第一个问题是没有人了解如何编写Javascript。尤其是那些认为自己做到的人。如果我们有任何有关Javascript的书,请立即将其扔出窗外。几乎没有关于该语言的好书,因为它们都遵循相同的" hacking"模式,而没有真正深入研究它们在做什么。

从最低层开始,团队将需要有关Javascript开发的补救培训。从《 Javascript客户端指南》开始。这是有关该语言的事实信息来源。下一站是Douglas Crockford的Javascript视频。我不同意他所说的一切,但他是为数不多的语言专家之一。

一旦确定下来,请考虑要使用哪些框架(如果有)。一般来说,我不喜欢Prototype和Mootools之类的东西。他们倾向于解决一个简单的问题,并使情况变得更糟。但是,我们可以随时评估这些工具并确定它们是否对我们有用。

如果我们绝对觉得自己的团队缺乏经验,那么就无法没有框架,那么GWT可能适合我们。 GWT使我们可以用Java代码快速编写DHTML Web应用程序,然后将其编译为Javascript。问题是我们这样做会放弃大量的灵活性。 Java语言比GWT公开的功能强大得多。但是,GWT确实使Java开发人员可以加快速度。所以选择你的战斗。

这些是我能想到的关键领域。我可以说,一旦申请被取消,我们将松一口气。可能有点野兽。特别是如果我们没有经验丰富的开发人员在Struts模型上工作。 :-)

任何问题?

编辑1:我忘了补充说,团队应该认真研究W3C规范。这些是现代浏览器中可用的API。如果我们发现有人使用DOM 0 API(例如,使用document.forms ['myform']。blah.value代替document.getElementById(" blah")。value),则迫使他们抄录整个DOM 1规范,直到他们理解它到底部。

编辑2:要考虑的另一个关键问题是如何记录新的AJAX应用程序。 REST风格的界面非常适合在Wiki中进行记录。我所做的是在顶层列出了每个服务和说明。通过单击服务路径,我们将进入一个文档,其中包含有关每个子路径的详细信息。从理论上讲,该方案可以记录我们需要的树的深度。

如果使用JSON,则需要开发一种方案来记录对象。我只是在Wiki中列出了可能的属性作为文档。这对于简单的对象树效果很好,但是对于更大,更复杂的对象可能会变得复杂。在这种情况下,我们可以考虑使用IDL或者WebIDL之类的东西进行补充。 (不能比XML DTD和Schema更糟糕。;-))

DHTML代码在其文档中更为经典。我们可以使用JSDoc之类的工具来创建JavaDoc样式的文档。只有一个警告。 Javascript代码不太适合以代码形式进行记录。如果没有其他原因,它会使下载过时。但是,我们可能会发现自己经常编写代码,将其作为具有凝聚力的对象运行,但没有在幕后将其编码为此类对象。因此,最好的解决方案是创建表示并记录Javascript对象的JSDoc框架文件。

如果我们使用的是GWT,那么文档编制应该是轻而易举的事情。

查看Stripes Framework。如果我们熟悉支柱,那么条纹将对我们有意义,但效果要好得多。他们在他们的网站上有Stripes vs Struts部分。我们可以检查一下,看看是否对我们感兴趣。它允许我们使用所需的任何ajax框架,而且我认为从Strut迁移到Strips不会花很长时间。