如题!
-->监听到session销毁,-->能否用过滤器实现跳转.   等待答案.

解决方案 »

  1.   

    这个是直接在jsp页面中的代码,如果是MVC,则在后台,代码基本一样!
      

  2.   

    要自动跳回的话,还是要用javascript的setInterval()来定时从客户端检查是否session有效
      

  3.   

    不用session销毁就条,只要在他操作时在判断就行,也更简单。很多邮箱就是怎么做的。
      

  4.   

    可行. 判断的时候除了null外,加上空""似乎更好!
      

  5.   


    能。
    如果用了过滤器,你根本就不需要监听器。
    你可以把过滤器的url-pattern设为/*
    这样它会过滤每一次请求
    然后你在过滤器中判断session中的数据是否存在,若不存在则说明会话失效啦,转发到登录页面去就可以了。形如:HttpServletRequest req = (HttpServletRequest) request;
    HttpSession session = req.getSession( false );
    if( session==null || session.getAttribute( "..." ) == null )
    {
      req.getRequestDispatcher( "/login.jsp" ).forward( request, response );
      return;
    }
      

  6.   

    [接7楼]
    但如果楼主的意思是:
    当监听器监听到session失效时立即让客户端跳转到登录页面(在客户端没发出任何请求的情况下),则绝对是不可能的。如果楼主是这个目的,就不必听人忽悠啦。呵呵。
      

  7.   

    恩。对,没有请求是无法做到的。在过滤器里面加个判断session过滤的方法。request.isRequestedSessionIdValid() 好像可以。我试试楼上各位的方法。
      

  8.   


    package yudylaw.bank.filter;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;public class UserLoginFilter implements Filter { public void destroy() {
    // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    HttpServletRequest req = (HttpServletRequest)request;
    if(!req.isRequestedSessionIdValid()){
    System.out.println("页面过期");
    req.getRequestDispatcher("index.htm").forward(request, response);
    }else if(null!=req.getSession()&&null!=req.getSession().getAttribute("account")){
    System.out.println("account在session中");
    chain.doFilter(request, response);
    }
    else{
    System.out.println("非法访问被过滤");
    req.getRequestDispatcher("index.htm").forward(request, response);
    }
    } public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub }}这样的代码吗?
      

  9.   

    在filter中写
    if(request.getSession(false)==null){
         //返回登录页
    }
      

  10.   


    对,request.getSession(false),我一直用request.getSession()。
      

  11.   

    用过滤器吧,和监听器一起使用也许效果更好:    
     -------------------web.xml配置:   
              <filter>   
                      <filter-name>sesfilter</filter-name>   
                      <filter-class>com.yc.plat.util.SessionFilter</filter-class>   
              </filter>   
              <filter-mapping>   
                      <filter-name>sesfilter</filter-name>   
                      <url-pattern>*</url-pattern>   
              </filter-mapping>   
      ------------------SessionFilter.java--------------------------   
      package com.yc.plat.util;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class SessionFilter implements Filter {  public void init(FilterConfig filterConfig)throws ServletException{ 
     
     }
     public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws ServletException,IOException{  
             HttpServletRequest req = (HttpServletRequest)request;   
             HttpServletResponse res = (HttpServletResponse)response;   
             boolean isValid=true;   
             //check   attribute   
             isValid=req.getSession(false)==null;
             if(isValid){   
                 req.getSession().getServletContext().getRequestDispatcher    ("/index.jsp").forward(req,res);//页面前的'/'一定不能省略 
             }else {
              chain.doFilter(request,response);   
             }
     }   
     public void destroy(){
     
     }   
    }