我可以在没有任何请求的情况下重定向页面到java中的服务器吗?

我可以在没有任何请求的情况下重定向页面到java中的服务器吗?,java,servlets,Java,Servlets,如果会话在web应用程序的web.xml文件中提到的特定时间内过期, 如果不单击任何链接,我的应用程序需要重定向到登录页面。我试图使用实现HttpSessionListener的Listener类,但我无法重定向到新页面,因为在普通的Listener中没有响应对象(response.sendRedirect(“login.jsp”)) 谢谢,Jampanna使用Spring安全框架,它拥有处理会话结束/重新登录情况的所有机制 或者,您可以使用javascript重定向到login.jsp,例如

如果会话在web应用程序的web.xml文件中提到的特定时间内过期, 如果不单击任何链接,我的应用程序需要重定向到登录页面。我试图使用实现HttpSessionListener的Listener类,但我无法重定向到新页面,因为在普通的Listener中没有响应对象(response.sendRedirect(“login.jsp”))


谢谢,Jampanna使用Spring安全框架,它拥有处理会话结束/重新登录情况的所有机制

或者,您可以使用javascript重定向到login.jsp,例如

function redirectToLogin(){ document.location = '/login.jsp' }

setTimeout( redirectToLogin, 300 );

这可能只适用于真正简单的网络应用程序。对于RIA,您必须通过请求服务器来检查会话状态

您不能这样做。至少不像你想的那么容易

如果会话过期,则意味着在会话超时期间没有来自客户端浏览器的请求。服务器甚至不知道用户是否关闭了浏览器窗口或正在上厕所等

HttpSessionListener
是仅服务器端事件,没有客户端请求。它表示在过去30分钟内没有针对该会话的客户端请求(如果会话超时为30分钟)

因此,您无法将浏览器窗口重定向到其他站点

另一种方法是,您可以经常从客户端的浏览器进行轮询。但这意味着,只有当用户导航到另一端或关闭浏览器时,服务器端会话才会过期。为了避免这种情况,您可以实现自己的会话超时。在每个轮询请求中,您可以确定最后一个“真实”请求的时间(表示没有轮询请求),然后重定向到登录页面并手动关闭会话


另一种选择是使用WebSocket作为反向通道。

感谢您的回复,我只需要在web.xml文件中设置会话到期时间,而不是任何jsp文件,我使用的是struts框架,您能告诉我如何使用Listener实现此目的吗。第一关
HttpSessionListener
属于
Servlet API
,而不是
Struts
。无论如何,我不认为Struts有现成的工具来实现您的案例,所以您必须自己构建解决方案。糟糕的是,您无法通过
HttpSessionListener
向web前端发送任何内容。浏览器必须询问服务器会话是否仍然有效。人们通常使用
Spring-Security
+
AJAX
的组合来实现这类功能我们可以在struts应用程序中使用Servlet,在struts中,主控制器是ActionServlet,它本身就是一个Servlet。我的想法是,当会话过期时,我会收到来自侦听器类的通知,就像会话已过期一样,这是在部署描述符中配置的,此时我想将页面重定向到登录页面