Java 从Struts到Tapestry 5的逐段转换

Java 从Struts到Tapestry 5的逐段转换,java,jsp,frameworks,struts,tapestry,Java,Jsp,Frameworks,Struts,Tapestry,我有一个Struts(1.3.8)应用程序,我想将其转换为Tapestry 5。可能没有时间一次性完成整个转换。我希望在Tapestry中提供新的功能,并在时间允许的情况下转换现有的Struts/JSP。有人尝试过这样的事情吗?Struts和Tapestry可以共存吗?如果不使用Tapestry,我认为任何两个框架都应该能够共存,因为在web.xml中,您可以定义URL如何映射到servlet/过滤器。例如,在Wicket中有一个过滤器,用于检查实现请求处理程序的Wicket类。如果没有匹配项,

我有一个Struts(1.3.8)应用程序,我想将其转换为Tapestry 5。可能没有时间一次性完成整个转换。我希望在Tapestry中提供新的功能,并在时间允许的情况下转换现有的Struts/JSP。有人尝试过这样的事情吗?Struts和Tapestry可以共存吗?

如果不使用Tapestry,我认为任何两个框架都应该能够共存,因为在
web.xml
中,您可以定义URL如何映射到servlet/过滤器。例如,在Wicket中有一个过滤器,用于检查实现请求处理程序的Wicket类。如果没有匹配项,则请求会向上传递链。这将允许您在某些操作中继续使用Struts

如果您有一些要保留的URL,只需将Struts操作更改为转发到新的内部URL;最终,所有struts操作本质上都是url重写操作,您可以删除struts并用url重写过滤器替换它

如果您的新URL都不会与旧URL冲突,那么就没有什么困难了。只需设置新框架及其请求处理程序。当遇到struts操作(
/doSomething.do
)时,struts
ActionServlet
将向该操作发送请求。在
struts config.xml
中,您可以转发到正确的位置,可以是JSP、tile或Tapestry URL。我想在Tapestry中,有一种方法可以在处理完请求后转发到任意url;如果需要,只需转发到Struts操作即可


我可以预见的一个棘手问题是,Struts和Tapestry是否对第三方LIB有冲突的需求。如果这不起作用,那么任何简单的迁移都可能会让你倒霉。

如果你像大多数人那样使用Struts,那么你的所有Struts URL可能都以/action开头或以.do结尾。正如Shinny先生和New先生指出的,这意味着您可以使用Tapestry过滤器和Struts过滤器或servlet过滤不同的URL。我已经使用了这两种方法,我强烈建议您尽量避免Tapestry处理Struts URL。有了Struts,您几乎可以手工编写URL代码,因此链接到Tapestry页面应该不会有问题,但是如果您希望Tapestry链接回Struts URL,那么使用标准方式可能会有问题。理想情况下,你可以拆分应用程序的一部分(如内部管理功能),让它们完全独立。

我曾经这样做过。我必须在两个框架的会话之间架起一座桥梁,因为它们使用自己的常量/前缀。我们做了一个从传统应用程序到T5应用程序的逐步切换。我们只是使用web.xml将struts请求指向struts,T5请求将由T5过滤器接收。我认为您甚至可以将T5过滤器配置为忽略某些URL

我们还使用tuckey URLRewrite过滤器来控制单个请求是否被删除,这样一来,一个页面可以在某一天被struts删除,第二天被T5删除,url将保持不变(如果您的struts应用程序是实时的,并且人们可能已经将其添加到书签中,这将非常有用)

我会通读代码(我把它存档在某个地方),如果发现任何问题,我会发回更多


祝你好运。

我已经通过添加Tapestry页面证明了Struts和Tapestry可以在同一个应用程序中生存。还需要做进一步的工作,看看两者之间的来回链接是否有问题,会话数据等,不要花太长时间;如果您的速度太慢,Tapestry 6将被淘汰,如果v4和v5版本可以使用,那么它将与以前的版本没有任何相似之处。