我有一个Struts(1.3.8)应用程序,我想转换为Tapestry 5.可能没有时间一次完成整个转换。我想在Tapestry中提供新功能,并在时间允许的情况下转换现有的Struts / JSP。有没有人尝试这样的事情? Struts和Tapestry能共存吗?
答案 0 :(得分:2)
如果按照大多数人的方式进行Struts,你可能拥有以/ action开头或以.do结尾的所有Struts网址。正如Shiny和New先生指出的那样,这意味着您可以使用Tapestry过滤器和Struts过滤器或servlet过滤不同的URL。我已经使用了两者,我强烈建议您尝试让Tapestry不必处理Struts URL。使用Struts,您几乎可以对URL进行手工编码,因此链接到Tapestry页面应该不会有问题,但如果您希望Tapestry链接回Struts URL,则可能无法以标准方式使用它。理想情况下,您可以拆分应用程序的一部分(如内部管理功能),并让它们完全独立。
答案 1 :(得分:1)
没有使用Tapestry,我会说任何两个框架都应该能够共存,因为在web.xml
中你定义了url如何映射到servlets / filters。例如,在Wicket中有一个过滤器,它检查实现请求处理程序的Wicket类。如果没有匹配,请求将在链中传递。这将允许您继续使用Struts进行某些操作。
如果您要保留一些网址,则可以更改Struts操作以转发到新的内部网址;最终你所有的struts动作基本上都是url-rewriting动作,你可以直接删除struts并用url重写过滤器替换它。
如果您的新网址都不与您的旧网址冲突,那么没有什么难以做到的。只需设置新框架及其请求处理程序即可。遇到struts操作(/doSomething.do
)时,Struts ActionServlet
会将请求分派给操作。在struts-config.xml
中,您可以转发到正确的位置,JSP或tile或Tapestry URL。我想在Tapestry中有一种方法可以在处理完请求后转发到任意URL。如果需要,只需转发Struts动作。
我可以预见的一个棘手的问题是Struts和Tapestry是否对第三方库有相互冲突的要求。如果这不起作用,您可能会因为任何简单的迁移而感到非常幸运。
答案 2 :(得分:0)
我做过一次。我必须在两个框架的会话之间建立一个桥梁,因为它们使用了自己的常量/前缀。我们逐步从遗留应用程序切换到T5应用程序。我们只是使用web.xml指向struts上的struts请求,T5过滤器将拾取T5请求。我认为你甚至可以配置T5过滤器来忽略某些网址。
我们还使用了tuckey URLRewrite过滤器来控制个别请求,这样一个页面可能是struts一天而T5是下一个并且url将保持不变(如果你的struts应用程序是实时的,人们可能有为它添加书签)
我会仔细阅读代码(我把它存档在某个地方),如果发现任何问题,我会发回更多信息。
祝你好运。