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

在我目前的项目中,我们过去几年一直在使用Struts 1,而且……唉… Struts正在显示它的时代。 我们正在慢慢地将我们的前端代码迁移到从服务器使用XML的Ajax客户端。 我想知道你是否有人将遗留的Struts应用程序迁移到不同的框架,以及你在这样做时面临的挑战。

当然。 从Struts迁移到AJAX框架是一种非常自由的体验。 (虽然我们使用的是JSON而不是XML。更容易解析。)但是,您需要知道它实际上是对应用程序的完全重写。

除了MVC的经典Database / JSP / Actions方案之外,您将发现自己转向Servlet / Javascript方案,其中模型由HTTP GET请求表示,操作由POST / PUT / DELETE请求表示,视图是由Web浏览器即时呈现。 这会在每个领域带来有趣的挑战:

服务器端 – 在服务器端,您需要开发一个用于向客户端公开数据的标准。 最简单和最简单的方法是采用最符合数据层次结构的REST方法。 使用servlet实现起来相当简单,但Sun也使用看起来非常酷的属性开发了Java 1.6方案 。

服务器端的另一个方面是选择传输协议。 我知道你已经提到了XML,但你可能想重新考虑一下。 XML解析器在浏览器之间差异很大。 一个浏览器可能使文档root成为第一个子节点,另一个浏览器可能会添加一个特殊内容对象,并且它们都以不同方式解析空白。 更糟糕的是,normalize()函数似乎没有被主流浏览器正确实现。 这意味着XML解析可能充满了黑客攻击。

JSON更易于解析,并且在结果中更加一致。 Javascript和Actionscript(Flash)都可以将JSON直接转换为对象。 这使得访问数据简单易于xy或x [y]。 还有很多API可以用各种可以想象的语言处理JSON。 因为它很容易解析,所以它几乎比XML支持更好!

客户端 – 您将遇到的第一个问题是没有人理解如何编写Javascript。 特别是那些认为他们做的人。 如果您有关于Javascript的任何书籍,请立即将它们抛出窗口。 几乎没有关于语言的好书,因为他们都遵循相同的“黑客”模式而没有真正深入了解他们正在做的事情。

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

一旦你了解了它,请考虑你想要使用哪些框架(如果有的话)。 一般来说,我不喜欢Prototype和Mootools之类的东西。 他们倾向于采取一个简单的问题并使其变得更糟。 尽管如此,您可以随意评估这些工具并确定它们是否适合您。

如果你绝对觉得你不能没有框架,因为你的团队太缺乏经验,那么GWT可能适合这个账单。 GWT允许您使用Java代码快速编写DHTML Web应用程序,然后将它们编译为Javascript。 问题在于你通过这样做放弃了大量的灵活性。 Javascript语言比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 。 如果你熟悉struts,那么条纹对你来说很有意义,但它会更好。 他们的网站上有Stripes vs Struts部分。 你可以检查一下,看看它是否让你感兴趣。 它允许您使用任何您想要的ajax框架,我认为从struts迁移到条带并不需要很长时间。