好久没用Java了,最近用Java做公司网站,遇到几个问题亟待解决,请教一下大家:
当登陆一段时间后(比如5分钟)没有任何操作,再来操作时提示一大堆错误,大意是NullPointer,Session失效,而不是提示未未登录(在页面判断过),界面不友好,怎么样避免这个问题,让页面显示未登录而不是错误信息?
怎样单独为一个项目设置Session的有效期?
用户登录后在页面上打印用户信息,是从保存的Session对象(request.getSession().setAttribute("user", user);)里面去
取还是另写一个方法取(我从Session里面取),哪种方法好?
查询条件中输入#%之类的字符,提交后报错,应该是转义字符错误,怎样转换,让后台取得的是#、%?

解决方案 »

  1.   

    那是你没有做判断的原因
    从session中取值后,要判断有没有该值,有才能做其他判断。没有就说明,该用户很长时间没有动作了,应该可以算是离开你网站了
      

  2.   

    .用session来判断的时候.. 没值!!!
       要把值写入session中去!!!!
      

  3.   

    你的页面可能设计长时间没操作比如120分钟,那么系统就消除session
      

  4.   

    session的过期时间 是可以设置的在WEB.xml 里面  <session-config>
       <session-timeout>60</session-timeout>
      </session-config>60的单位是分钟哦。session 过期后 你让WEB应用转到登录页面去
      

  5.   

    查询条件中输入#%之类的字符最好在 WEB前台 使用JS 过滤掉~ %  可能会导致SQL 查询缓慢,你自己权衡一下吧
      

  6.   

    在你的web.xml中设置它的时间   
              
    <session-config>   
                      <session-timeout>30</session-timeout>   
              </session-config>然后再每一个页面判断session是否为空就就了。如果为空就跳转
      

  7.   

    哪个web.xml?是Tomcat下的web.xml还是项目下的web.xml?
      

  8.   

    报的错误如下:
    javax.servlet.ServletException: java.lang.NullPointerException
    org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    cn.permay.SessionFilter.doFilter(SessionFilter.java:30)
      

  9.   

    设置session时间的3个方法
    1. 在tomcat——>conf——>servler.xml文件中定义: <Context path="/test" docBase="/test" 
       defaultSessionTimeOut="3600" isWARExpanded="true" 
       isWARValidated= "false" isInvokerEnabled="true" 
       isWorkDirPersistent= "false"/> 
    defaultSessionTimeOut="3600"2. 在web.xml中定义: <session-config> 
    <session-timeout>20</session-timeout> 
    </session-config>3. 在程序中定义: session.setMaxInactiveInterval(30*60);设置单位为秒,设置为-1永不过期 
      

  10.   

    一般来讲用户信息不多的话就保存在session中就可以了 如果信息很多很复杂 建议还是不要保存在session里 会严重影响系统性能
      

  11.   

    我是这样判断Session的:
    <logic:notPresent name="member">
    <div class="nologin">
    抱歉,您还未登录,请先<a href="<%=request.getContextPath()%>/index.jsp">登录</a>
    </div>
    </logic:notPresent>
      

  12.   

    在web.xml 里面设置session的过期时间<session-config> 
      <session-timeout>30</session-timeout> 
    </session-config>然后再写个Filter,在web.xml中配置一下,因为每个操作首先都会执行Filter,所以只要在这个Filter里面判断session是否为有效,无效则跳转到登陆页面。
      

  13.   

    Filter也写了,代码如下:
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    HttpSession session = ((HttpServletRequest) request).getSession(false);
    if (session != null
    && System.currentTimeMillis() - session.getLastAccessedTime() > time) {
    session.invalidate();
    ((HttpServletRequest) request).getRequestDispatcher("/index.jsp")
    .forward(request, response);
    } else
    chain.doFilter(request, response);
    }
    也配置了,还是报那样的错。
      

  14.   

    在WEB.xml 里面   <session-config> 
      <session-timeout>60 </session-timeout> 
      </session-config>
    每次sevlet或者jsp都先判断session里的user对象==null?
      

  15.   

    试试这个?
    <logic:notEmptyname="member">
    <div class="nologin">
    抱歉,您还未登录,请先 <a href=" <%=request.getContextPath()%>/index.jsp">登录 </a>
    </div>
    </logic:notEmpty>
      

  16.   

    <logic:empty name="member">
    <div class="nologin">
    抱歉,您还未登录,请先 <a href=" <%=request.getContextPath()%>/index.jsp">登录 </a>
    </div>
    </logic:empty>
    <logic:notEmpty name="member">

    您已经登陆
    </logic:notEmpty>
    刚上面写反了,不好意思哈
      

  17.   

    <logic:empty name="user"> 
       是空的就跳到登陆页面
    </logic:empty> 
    <logic:notEmpty name="user"> 
       不为空,该干什么就干什么
    </logic:notEmpty> 
      

  18.   

    session对象应该还可以点出关于session多久失效的方法。
      

  19.   

    session.setMaxInactiveInterval(1800); 设置session存活时间 单位S
      

  20.   

    session.setMaxInactiveInterval(-1)页面关闭了才过期。。
      

  21.   

    用logic:notPresent、logic:present、logic:empty、logic:notEmpty差别不大,主要差异在对字符串的处理上。
      

  22.   

    可以执行完了之后,做个session判断
    不用搞太复杂