Has anyone migrated from Struts 1 to another web framework?在我当前的项目中,过去几年我们一直在使用 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 的书籍,请立即将它们扔出窗外。几乎没有关于该语言的好书,因为它们都遵循相同的"黑客"模式,而没有真正深入了解他们正在做什么。 从最底层开始,您的团队将需要 Javascript 开发方面的补习培训。从 Javascript 客户端指南开始。它是该语言的事实上的信息来源。下一站是 Douglas Crockford 的 Javascript 视频。我不同意他所说的一切,但他是为数不多的语言专家之一。 一旦你搞定了,考虑一下你想使用什么框架(如果有的话)。一般来说,我不喜欢 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 和模式差多少。;-)) DHTML 代码在其文档中更为经典。您可以使用像 JSDoc 这样的工具来创建 JavaDoc 样式的文档。只有一个警告。 Javascript 代码不适合在代码中记录。如果没有其他原因,它会使下载膨胀。但是,您可能会发现自己经常编写作为内聚对象运行的代码,但并未在幕后将其编码为这样的对象。因此,最好的解决方案是创建代表和记录 Javascript 对象的 JSDoc 框架文件。 如果您正在使用 GWT,文档应该很容易。 查看 Stripes 框架。如果您熟悉 struts,那么条纹对您来说会很有意义,但它会好得多。他们的网站上有一个 Stripes vs Struts 部分。你可以检查一下,看看你是否感兴趣。它允许您使用任何您想要的 ajax 框架,而且我认为从 struts 迁移到 stripes 不会花费很长时间。 |