【发布时间】:2015-06-04 13:50:04
【问题描述】:
我有一个网络服务,它可以非常简单地转发到位于同一 Tomcat 容器上的另一个网络应用程序。
private Response forward(
@Context ServletContext context,
@Context HttpServletRequest request,
@Context HttpServletResponse response){
ServletContext ctx = context.getContext("/myothewebapp");
RequestDispatcher dispatcher=ctx.getRequestDispatcher("/test");
dispatcher.forward(request, response);
return Response.ok("").build();
}
除了这个 webapp 的会话没有过期这一事实之外,这可以正常工作。在 tomcat 管理器中,您可以看到打开的会话积累得非常快,多达数百个。
我不确定为什么在响应已经发送后它们会持续存在。 任何想法我的前向方法中缺少什么?
【问题讨论】:
-
您转发的请求不会使会话失效...会话不会过期,除非您 1. 关闭浏览器 2. 手动使会话过期 3. 如果设置了会话超时,请等待。跨度>
-
session.invalidate();可用于使会话无效...session = request.getSession(true);可用于获取新会话 -
好的,但是如果我只用通常的 return Response.ok().build(); 终止请求,那么会话不会累积是怎么回事?
-
每次转发到另一个应用程序时,都会创建一个新会话,它不会在应用程序之间共享会话...
-
当您刚返回时,您仍在同一个应用程序中,因此没有创建新会话...