好久没用Java了,最近用Java做公司网站,遇到几个问题亟待解决,请教一下大家:
当登陆一段时间后(比如5分钟)没有任何操作,再来操作时提示一大堆错误,大意是NullPointer,Session失效,而不是提示未未登录(在页面判断过),界面不友好,怎么样避免这个问题,让页面显示未登录而不是错误信息?
怎样单独为一个项目设置Session的有效期?
用户登录后在页面上打印用户信息,是从保存的Session对象(request.getSession().setAttribute("user", user);)里面去
取还是另写一个方法取(我从Session里面取),哪种方法好?
查询条件中输入#%之类的字符,提交后报错,应该是转义字符错误,怎样转换,让后台取得的是#、%?
当登陆一段时间后(比如5分钟)没有任何操作,再来操作时提示一大堆错误,大意是NullPointer,Session失效,而不是提示未未登录(在页面判断过),界面不友好,怎么样避免这个问题,让页面显示未登录而不是错误信息?
怎样单独为一个项目设置Session的有效期?
用户登录后在页面上打印用户信息,是从保存的Session对象(request.getSession().setAttribute("user", user);)里面去
取还是另写一个方法取(我从Session里面取),哪种方法好?
查询条件中输入#%之类的字符,提交后报错,应该是转义字符错误,怎样转换,让后台取得的是#、%?
从session中取值后,要判断有没有该值,有才能做其他判断。没有就说明,该用户很长时间没有动作了,应该可以算是离开你网站了
要把值写入session中去!!!!
<session-timeout>60</session-timeout>
</session-config>60的单位是分钟哦。session 过期后 你让WEB应用转到登录页面去
<session-config>
<session-timeout>30</session-timeout>
</session-config>然后再每一个页面判断session是否为空就就了。如果为空就跳转
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)
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永不过期
<logic:notPresent name="member">
<div class="nologin">
抱歉,您还未登录,请先<a href="<%=request.getContextPath()%>/index.jsp">登录</a>
</div>
</logic:notPresent>
<session-timeout>30</session-timeout>
</session-config>然后再写个Filter,在web.xml中配置一下,因为每个操作首先都会执行Filter,所以只要在这个Filter里面判断session是否为有效,无效则跳转到登陆页面。
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);
}
也配置了,还是报那样的错。
<session-timeout>60 </session-timeout>
</session-config>
每次sevlet或者jsp都先判断session里的user对象==null?
<logic:notEmptyname="member">
<div class="nologin">
抱歉,您还未登录,请先 <a href=" <%=request.getContextPath()%>/index.jsp">登录 </a>
</div>
</logic:notEmpty>
<div class="nologin">
抱歉,您还未登录,请先 <a href=" <%=request.getContextPath()%>/index.jsp">登录 </a>
</div>
</logic:empty>
<logic:notEmpty name="member">
您已经登陆
</logic:notEmpty>
刚上面写反了,不好意思哈
是空的就跳到登陆页面
</logic:empty>
<logic:notEmpty name="user">
不为空,该干什么就干什么
</logic:notEmpty>
不用搞太复杂