我在登陆的一个login.java里面写了个session.setAttribute("AObject");
然后在一些.jsp页面中调用了这个AObject,但过一段时间AObject就为空,在所有调用这个对象的页面都报空指针异常,必须手动重新登陆才可以。怎么设置这个session的存活期呀!让session过期后能自动跳转到登陆页面login.jsp.
我在tomcat配置文件web.xml中有
<session-config>
        <session-timeout>30</session-timeout>
</session-config>
但还是会报空指针错!

解决方案 »

  1.   

    基本的,页面加入
    if ( session.getAttribute("AObject") == null || session.getAttribute("AObject").equals("") ){
    out.print("<script>window.location='login.jsp';</script>");
    }
      

  2.   

    /*首先写一个权限过滤filter*/
    import javax.servlet.Filter;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.FilterChain;
    import java.io.IOException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpServletResponse;public class RightFilter
        implements Filter {
      public void init(FilterConfig filterConfig) throws ServletException {
      }  public void doFilter(ServletRequest request, ServletResponse response,
                           FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        
        HttpSession session = req.getSession(true);    //从session里取的用户名信息
        String username = (String) session.getAttribute("username");
        
        //判断如果没有取到用户信息,就跳转到登陆页面
        if (username == null || "".equals(username)) {
          //跳转到登陆页面
          res.sendRedirect("http://"+req.getHeader("Host")+"/login.jsp");
        }
        else {
          //已经登陆,继续此次请求
          chain.doFilter(request,response);
        }
      }  public void destroy() {
      }
    }
    下面配置这个过滤器
    然后在web.xml里配置那些JSP文件需要登陆权限验证:1.如果是某个具体的JSP文件(如a.jsp)需要登陆验证
    <web-app>
      ...
      <filter>
        <filter-name>right</filter-name>
        <filter-class>com.taihuatalk.taihua.common.common.RightFilter</filter-class>
      </filter>  <filter-mapping>
        <filter-name>right</filter-name>
        <url-pattern>/a.jsp</url-pattern>
      </filter-mapping>
      ...
    </web-app>2.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:
    <web-app>
      ...
      <filter>
        <filter-name>right</filter-name>
        <filter-class>com.taihuatalk.taihua.common.common.RightFilter</filter-class>
      </filter>  <filter-mapping>
        <filter-name>right</filter-name>
        <url-pattern>/a/*</url-pattern>
      </filter-mapping>
      ...
    </web-app>
    这是以前论坛一位师兄弄得过滤器的例子.楼主可以参考一下!
      

  3.   

    session.setAttribute("AObject");封装在一个类里好了。需要的页面都调这个类。这样可以统一判断了。
      

  4.   

    struts-config.xml:
    <controller processorClass="com.action.aaaRequestProcessor" /><message-resources parameter="application" />
        <global-forwards>
            <!-- Demonstrates using index.jsp to forward -->
    <forward name="timeout" path="/pages/login.do" />
        </global-forwards>
    aaaRequestProcessor:
    String aObject= (String) request.getSession().getAttribute("AObject");
    if (aObject== null) {
    return mapping.findForward("timeout");
    }
      

  5.   

    回复:
    Sunny319(努力学习java中.) 
    太感谢了!就是,写了个过滤器就解决了!
      

  6.   

    是个不错的方法,如果在需要这个SESSION的每个页面都判断就太麻烦了
      

  7.   

    好行有一个方法
    session.setTimeOut()什么的,括号里面是时间大概是毫秒为单位!!