第一次写博客,早就有这个想法,奈何实力不够,又没有太多的时间,现在在一家公司实习,有一些时间,就把一些问题的解决方法用这个来记录下来吧,权当记事本了。
session是用来保存用户状态的,比如我们设计网页时,用jsp为例,我们登录之后再进行其他操作时就要检验是否登录,就像csdn一样,登录之后就不用登录,可以使用自己的权限。
以前很少用到这个,学校教的不全面,现在举例:我们在jsp页面登陆完传值回servlet处理时,可以这样写servlet。
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String loginName = req.getParameter("loginName");
String passWord = req.getParameter("passWord");
t_sys_User_Dao tsud = new t_sys_User_DaoImpl();
PrintWriter pw = resp.getWriter();
List<t_sys_User> list = tsud.findAll();
HttpSession session = req.getSession();
System.out.println("list.size===="+list.size());
for(int i=0;i<list.size();i++){
if(loginName.equals(list.get(i).getLoginName())){
if(passWord.equals(list.get(i).getPassword())){
session.setAttribute("loginName", loginName);
resp.sendRedirect("/index.jsp");
break;
}else{
String a="<body onLoad=\"checkForm()\"><script language=\"JavaScript\" type=\"text/JavaScript\">function checkForm(){"+
"alert(\"password error!\");location.href='/login/loginForm.jsp';}</script>";
pw.println(a);
break;
}
}
if((i+1)==list.size()){
String b="<body onLoad=\"checkForm()\"><script language=\"JavaScript\" type=\"text/JavaScript\">function checkForm(){"+
"alert(\"user not exist!\");location.href='/login/loginForm.jsp';}</script>";
pw.println(b);
}
}
}
session.setAttribute("loginName", loginName);这句话是用来设置session的,后面的一些语句是用来检测一下而已。session在使用时必须先设定,这样我们的浏览器中就有这个session了,它的名字是loginName。
获取session与检测有两种方法:
1)<%
String ss = (String)session.getAttribute("loginName");
if(ss==null){
response.sendRedirect("/login/loginForm.jsp");
}
%>
在要检测的页面放入以上代码,这样的话在执行这个页面的时候就要先判断session是否为空,是的话就要返回登录。
2)这种方法是用过滤器
在每个要执行的页面都先过滤,判断session
public class checkSession implements Filter {
//这个在web.xml中要放在最上面
public checkSession() {
// TODO Auto-generated constructor stub
}
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
String loginName = (String)req.getSession().getAttribute("loginName");
System.out.println("loginName+session===="+loginName);
if(loginName!=null){
chain.doFilter(request, response);
}else{
req.getRequestDispatcher("login/loginForm.jsp").forward(request, response);
}
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
这种方法比较快捷,不用每个页面都添加判断代码,十分方便,上面的过滤器比较简单。
注意:过滤器在web.xml中要放在servlet的前面,这样才有效果