关于java:有没有人从Struts 1 迁移到另一个web 框架?

关于java:有没有人从Struts 1 迁移到另一个web 框架?

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 不会花费很长时间。


推荐阅读

    纯命令行linux服务器?

    纯命令行linux服务器?,密码,服务,系统,命令,终端,地址,百度,情况,状态,公共,

    检查linux服务器命令?

    检查linux服务器命令?,系统,信息,状态,情况,时间,工具,网络,环境,服务,电脑,

    linux打包项目命令?

    linux打包项目命令?,项目,文件,命令,软件,数字,系统,名称,工具,目录,格式,Lin

    linux项目更新命令行?

    linux项目更新命令行?,工作,地址,系统,数据,信息,项目,标准,电脑,目录,命令,l

    linux服务器域名命令?

    linux服务器域名命令?,地址,信息,系统,网络,服务,环境,名称,网站,管理,电脑,l

    linux服务器命令框?

    linux服务器命令框?,系统,情况,状态,信息,数据,软件,指标,服务,在线,工具,lin

    服务器linux命令教程?

    服务器linux命令教程?,系统,地址,密码,网络,设备,工作,服务,标准,连续,管理,

    linux服务器分区命令?

    linux服务器分区命令?,系统,管理,信息,设备,时间,命令,基础,首次,平均,情况,l

    linux服务器上传命令?

    linux服务器上传命令?,服务,软件,平台,数据,工具,系统,手机,电脑,设备,官网,

    linux网络服务器命令?

    linux网络服务器命令?,地址,网络,系统,名称,信息,工具,状态,中心,灵活,基础,l

    linux网络服务器命令?

    linux网络服务器命令?,地址,网络,系统,名称,信息,工具,状态,中心,灵活,基础,l

    linux服务器基本命令?

    linux服务器基本命令?,地址,系统,设备,网络,工作,标准,信息,电脑,命令,密码,l

    linux服务器下载命令?

    linux服务器下载命令?,服务,密码,系统,档案,工具,网络,公共,百度,地址,认证,l

    linux服务器常用命令?

    linux服务器常用命令?,工作,系统,地址,信息,命令,目录,管理,标准,设备,功能,

    linux服务器保存命令?

    linux服务器保存命令?,时间,状态,档案,电脑,命令,信息,位置,编辑,文件,模式,L

    linux服务器扫盘命令?

    linux服务器扫盘命令?,地址,工作,命令,目录,数据,单位,名称,系统,管理,信息,L

    linux命令切换服务器?

    linux命令切换服务器?,地址,名称,系统,环境,实时,命令,服务器,脚本,路径,版

    linux命令创建项目组?

    linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文

    linux服务器搭建命令?

    linux服务器搭建命令?,系统,服务,软件,地址,平台,在线,密码,工具,环境,百度,l

    服务器重启命令linux?

    服务器重启命令linux?,工作,标准,设备,服务,系统,名称,命令,百度,网络,密码,