我是struts的新手.我正在使用Struts2.请任何人告诉我如何在Session有超时后自动重定向jsp页面.
Ume*_*thi 20
那么您需要创建一种方法来检查会话是否已过期,因为浏览器无法确定会话是否已过期.您需要执行以下步骤
在web.xml中定义会话超时.
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
Struts2的一个简单方法是创建一个Interceptor并检查Session的有效性,如果session已经过期,你可以将用户重定向回你指定的jsp页面.这里是一个示例拦截器的快速视图
public class SessionInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
Map<String,Object> session = invocation.getInvocationContext().getSession();
if(session.isEmpty())
return "session"; // session is empty/expired
return invocation.invoke();
}
Run Code Online (Sandbox Code Playgroud)
最后,你需要告诉Stuts2你想通过在struts.xml文件中声明它来使用这个拦截器
<interceptor name="session" class="myapp.interceptor.SessionInterceptor" />
<interceptor-stack name="sessionExpirayStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="session"/>
</interceptor-stack>
Run Code Online (Sandbox Code Playgroud)
现在,您需要在操作中使用此堆栈声明
<action name="myAction" class="myClass">
<interceptor-ref name="sessionExpirayStack" />
<result name="success">success.jsp</result>
<result name="session">sessionexpired.jsp</result>
</action>
Run Code Online (Sandbox Code Playgroud)
替代方案是,您可以声明全局结果,*session*以便将使用重定向到全局的同一页面.
对于Struts2之外的方式,你可以选择创建一个Servlet过滤器,并可以在过滤器中放置会话检查代码.你需要实现javax.servlet.Filter接口
public final CheckSession impliments Filter{
private FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void destroy() {
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain
chain) {
// Put your logic here to check session
}
}
Run Code Online (Sandbox Code Playgroud)
对于自动重定向,您必须通过某种Ajax调用继续检查会话
| 归档时间: |
|
| 查看次数: |
25462 次 |
| 最近记录: |