我已经构建了两个Web应用程序,可以将它们称为App1和App2。
App1具有多个页面(Page1.jsp和Page2.jsp)。 App1是一个独立的应用程序,其菜单链接到两个页面。
App2具有多个页面(Page3.jsp和Page4.jsp)。 App2还是一个独立的应用程序,其菜单链接到两个页面。
现在,我想将App1和App2组合成一个超级应用程序,而无需修改App1或App2。该超级应用程序应具有一个菜单,该菜单链接到App1 / Page1.jsp,App1 / Page2.jsp,App2 / Page3.jsp和App2 / Page4.jsp。
我想到了几种方法可以做到这一点:
解决方案1:框架
我可以创建一个菜单框架,其中包含一个菜单,该菜单链接到App1和App2的页面。
我可以有一个单独的框架,用于显示App1和App2的内容。
但是,我不希望使用框架(http://www.html-faq.com/htmlframes/?framesareevil)。
解决方案2:根据URL参数动态构建菜单
超级应用程序可以具有一个基于div的菜单,该菜单链接到App1和App2。它可以在URL上传递参数,例如App1 / Page1.jsp?parent = SuperApp。
App1和App2可以基于父参数动态构建菜单。
例如,如果不存在父参数,则App1将使用其正常菜单链接到Page1.jsp和Page2.jsp。
但是,如果存在父参数,则App1将使用SuperApp菜单(SuperApp / header.html)-它会在JSP页面中动态包含此HTML。该SuperApp菜单将链接到App1和App2中提供的所有页面。
第二种解决方案可以在不使用框架的情况下工作,但是我想探讨是否还有其他我没有考虑过的解决方案?
最佳答案
如何让第三个Web应用程序负责菜单:
在每个页面中配置一个非常小的JavaScript组件,以对菜单应用程序进行AJAX调用以填充它。通常,这可以通过带有特殊类或ID的空<div>
来实现。您还具有一个脚本(从MenuApp下载),该脚本可找到<div>
并添加菜单。
一些想法:
最简单的实现是MenuApp使用servlet config来配置菜单选项。一种更灵活的方法可以使用SQL或NoSQL DB
参数化调用,其中调用页面可以使用菜单上下文(例如LoggedIn,AdvancedUser,Configuration)来调用,并且MenuApp返回菜单项的适当子集
更加高级:用户可以配置自己的收藏夹
这样做的主要缺点是附加的回调,尽管如果您已经在使用AJAX,则开销可能很小。
顺便说一句,这类似于FaceBook,Google +,Twitter,Pinterest等如何实现其Like,PlusOne等按钮,同时在第三方Web应用程序中的侵入性最小。例如,参见:https://developers.google.com/+/plugins/+1button/
关于java - 没有框架的复合Web应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14762842/