Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从另一个Eclipse RAP入口点访问一个Eclipse RAP入口点?_Eclipse_Eclipse Rap - Fatal编程技术网

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

如何从另一个Eclipse RAP入口点访问一个Eclipse RAP入口点?,eclipse,eclipse-rap,Eclipse,Eclipse Rap,我有一个EclipseRAP2.3应用程序,它有两个入口点,比如/first和/second。 在第一个入口点的GUI中,有一个按钮,我想用它在新的浏览器选项卡中打开第二个入口点。该按钮的事件处理程序当前为 urlauncher-launcher=RWT.getClient().getService(urlauncher.class); openURL(“/秒”); 当应用程序在Tomcat web服务器中部署为myapp.war时(应该是/myapp/second),这就不起作用了 我的问题

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

urlauncher-launcher=RWT.getClient().getService(urlauncher.class);
openURL(“/秒”);
当应用程序在Tomcat web服务器中部署为
myapp.war
时(应该是
/myapp/second
),这就不起作用了

我的问题是:

  • 确定要在事件处理程序中打开的URL的最佳方法是什么
  • 我是否必须获取
    HttpServletRequest
    、获取上下文路径以及一些字符串操作
  • 此时调用
    RWT.getRequest()
    是否确实安全

更新

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

  • 第一种方法是

    RWT.getRequest().getContextPath();
    
    其中
    RWT.getRequest()

    不建议使用此方法

  • 第二,我可以用计算机来获得它

    ApplicationContextImpl ac=(ApplicationContextImpl)RWT.getApplicationContext();
    字符串contextPath=ac.getServletContext().getContextPath();
    
    IDE显示警告的位置

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

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

  • 因此,在这两种情况下都存在某种警告,这使得解决方案看起来更像是解决办法。

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

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

    RWT.getUISession( display ).getHttpSession().getServletContext();
    
    访问servlet上下文


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

    可以从servlet上下文“ServletContext#getContextPath()”获取上下文路径(在您的情况下为myapp)。不确定还有什么遗漏,或者这样一个相对URL是否有效。我已经用你建议的代码示例更新了线程。但我仍然想知道最好的办法是什么。