我有一个带有两个入口点的Eclipse RAP 2.3应用程序,比如/first
和/second
。
在第一个入口点的GUI中,有一个按钮,我想在新的浏览器选项卡中打开第二个入口点。该按钮的事件处理程序当前是
UrlLauncher launcher = RWT.getClient().getService( UrlLauncher.class );
launcher.openURL( "/second");
当应用程序在Tomcat Web服务器中部署为myapp.war
时,这已经不起作用(应该是/myapp/second
)。
我的问题:
HttpServletRequest
,获取上下文路径以及一些字符串操作?RWT.getRequest()
实际上是否安全? 更新
根据Rüdiger的评论,我可以通过两种不同的方式获取背景路径。
第一种方法是
RWT.getRequest().getContextPath();
其中RWT.getRequest()
is documented with
不推荐使用此方法
其次,我可以用
获得它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时,它仍然有效。
因此,在这两种情况下都会出现某种警告,这使得解决方案看起来更像是解决方法。
答案 0 :(得分:1)
建议不要使用RWT.getRequest()
,因为通常RWT会使您免受低级servlet API的影响,并且与请求的某些直接交互甚至可能会干扰RWT的生命周期并产生有趣的响应。
虽然在您的情况下通过ServletContext
访问RWT.getRequest()
是安全的,但我建议您使用
RWT.getUISession( display ).getHttpSession().getServletContext();
访问servlet上下文。
第二种方法访问不属于公共API的内部类,因此不应使用。访问过的类可能会在未来发生变化或(重新)移动,恕不另行通知,并且会破坏您的申请。