3

我有一个 Eclipse RAP 2.3 应用程序,它有两个入口点,比如说/first/second. 在第一个入口点的 GUI 中,有一个按钮,我想用它在新的浏览器选项卡中打开第二个入口点。该按钮的事件处理程序当前是

UrlLauncher launcher = RWT.getClient().getService( UrlLauncher.class );
launcher.openURL( "/second");

当应用程序部署在 Tomcat Web 服务器中时,这已经不起作用myapp.war(应该是/myapp/second)。

我的问题:

  • 确定要在事件处理程序中打开的 URL 的最佳方法是什么?
  • 我是否必须获取HttpServletRequest,获取上下文路径以及一些字符串操作?
  • 这个时候打电话真的安全RWT.getRequest()吗?

更新

根据 Rüdiger 的评论,我可以通过两种不同的方式获取上下文路径。

  1. 第一种方法是

    RWT.getRequest().getContextPath();
    

    记录在哪里RWT.getRequest()

    不推荐这种方法

  2. 其次,我可以通过

    ApplicationContextImpl ac = (ApplicationContextImpl) RWT.getApplicationContext();
    String contextPath = ac.getServletContext().getContextPath();
    

    IDE 显示警告的位置

    不鼓励访问:由于所需库的限制,无法访问 ApplicationContextImpl 类型 ...\org.eclipse.rap.rwt_2.3.2.20150128-1013.jar

    尽管有警告,但在将带有 OSGi 捆绑包的 WAR 文件部署到 Tomcat 时,它仍然有效。

因此,在这两种情况下都会出现某种警告,这使得解决方案看起来更像是变通方法。

4

1 回答 1

1

不推荐使用RWT.getRequest(),因为通常 RWT 会保护您免受较低级别的 servlet API 的影响,并且与请求的某些直接交互甚至可能会干扰 RWT 的生命周期并产生有趣的响应。

虽然在您的情况下访问ServletContextvia是安全的RWT.getRequest(),但我建议使用

RWT.getUISession( display ).getHttpSession().getServletContext();

访问 servlet 上下文。

第二种方法访问不属于公共 API 的内部类,因此不应使用。访问的类将来可能会更改或(重新)移动,恕不另行通知并破坏您的应用程序。

于 2015-04-21T08:46:11.020 回答