【发布时间】:2016-02-18 00:48:52
【问题描述】:
我正在开发一个 Eclipse RAP 应用程序(RCP 作为 Web 应用程序)。 servlet 容器使 HttpSession 失效后(会话超时,setMaxInactiveInterval 已超出),在浏览器中点击应用程序时会抛出以下异常:
java.lang.NullPointerException
at org.eclipse.rap.rwt.internal.service.LifeCycleServiceHandler.service(LifeCycleServiceHandler.java:66)
at org.eclipse.rap.rwt.engine.RWTServlet.handleValidRequest(RWTServlet.java:135)
...
所以我实现了一个 javax.servlet.Filter 来检测这种情况,现在应该重定向到某个地方以显示“会话超时,请重新加载”消息。
对于“会话超时”警告,我首选的解决方案是一个简单的 HTML5 页面,其中包含一个返回应用程序的链接。但我不知道如何将 HTML5 页面与 RAP 应用程序集成(以及这是否是一个好主意)。我也不清楚重定向应该如何以及在哪里发生。
为了重定向,我尝试了过滤器中的两种变体。 第一个给我“错误:SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列的意外字符”:
httpServletResponse.sendRedirect("/myapp");
还有这个“java.lang.IllegalStateException: Invalid thread access” 在 org.eclipse.rap.rwt.RWT.checkContext(RWT.java:704)"
UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class);
launcher.openURL("http://www.eclipse.org/");
所以我可能真的走错了路……
有谁知道在 Eclipse RAP 应用程序中处理 HTTP 会话超时情况的标准方法?
HTTP 会话是否是处理此问题的正确位置,还是我应该查看 org.eclipse.rap.rwt.service.UISession 或其他内容?
如果应用程序位于“http://127.0.0.1:50045/myapp”之类的 URL 上,我该如何重定向到应用程序的主页?
我能否轻松地将简单的 HTML5 页面与 RAP 应用程序集成(页面在同一个 Eclipse 项目中,部署在同一个 WAR 中,在同一个主机上可用)?或者这将是一项不开箱即用的乏味任务?
【问题讨论】:
-
更新:NullPointerException 确实是一个错误,更新到 org.eclipse.rap.rwt_3.0.0.20150601-1556.jar 解决了这个问题。 RAP 基础架构可以很好地处理 HTTP 会话超时,无需自己动手。
标签: eclipse-rcp http-redirect httpsession eclipse-rap