如何从另一个访问一个Eclipse RAP入口点?

时间:2015-04-17 09:34:11

标签: eclipse eclipse-rap

我有一个带有两个入口点的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() is documented with

      

    不推荐使用此方法

  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时,它仍然有效。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

访问servlet上下文。

第二种方法访问不属于公共API的内部类,因此不应使用。访问过的类可能会在未来发生变化或(重新)移动,恕不另行通知,并且会破坏您的申请。