自动登陆实现:
实验步骤:
1.要有登陆页面(用户名输入框,密码输入框,自动登陆勾选,提交按钮)
2.要有处理请求的servlet,能对登陆进行处理
3.测试:
如何勾选自动登陆,那么下次不用输入用户名和密码了,直接跳转到首页面
使用技术:
Cookie:
朝电脑硬盘上写入文本,保存用户名和密码,那么如果勾选自动登陆,
下次登陆就会从硬盘上读取保存的用户名和密码,那么就不用输入了。
第一步:login.jsp
<form action="UserServlet/login" method="post">
username:<input type="text" name="username"/>${message }<br>
password:<input type="text" name="password"/><br>
是否自动登陆:<input type="checkbox" name="isAutologin"/><br>
<input type="submit" />
</form>
第二步:UserServlet
private void Login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/* 处理登陆请求
* 登陆的时候要做的事情:1.验证码 2.非空校验 3.自动登陆 4.放入session 5.跳转 6.用户的合法性校验
*/
// 获取表单数据---非空校验---验证码是否匹配----校验用户的合法性---放入session--如果自动登陆那么写cookie--跳转
/*1.什么时候跳转,什么时候重定向
* 更新操作结束99%都是重定向,如果不重定向,那么刷新页面,又更新一次
* 注意:由于跳转比重定向效率高,所以不要随便重定向
* 查询结束,那就跳转
* 如果用户访问的首页面在WEB-INF目录下,那么只能跳转,
*/
//1. 获取表单数据
String username=request.getParameter("username");
String password=request.getParameter("password");
String isAutologin=request.getParameter("isAutologin");
System.out.println("username:"+username);
System.out.println("password:"+password);
System.out.println("isAutologin:"+isAutologin);
//2.非空校验
if(username==null&&password==null)
{
request.setAttribute("message", "请输入用户名和密码");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
//3.校验用户的合法性
/*生产环境这样写:
* Users user_result=userDao.queryUserByUsernameAndPassword(user);
* if(user_result!=null)
*/
if("zhangsan".equals(username)&&"123".equals(password))
{
//4.放入session
HttpSession session=request.getSession();
session.setAttribute("username", username);
//生产环境这样写: session.setAttribute("user",user);
//5.如果自动登陆那么写cookie
if(isAutologin!=null)
{
writeCookie(request, response, username, password);
}
//6.跳转到首页面
request.getRequestDispatcher("/user/index.jsp").forward(request, response);
}else {
request.setAttribute("message", "用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
第三步:写cookie
//写cookie
private void writeCookie(HttpServletRequest request,
HttpServletResponse response, String username, String password) {
//怎么写cookie?
Cookie cookie_username=new Cookie("username", username);
Cookie cookie_password=new Cookie("password", password);
//设置cookie的有效期,只要设置这个参数,那么cookie一定写入硬盘保存
cookie_username.setMaxAge(7*24*60*60);//一周自动登陆,会写硬盘
cookie_password.setMaxAge(7*24*60*60);//一周自动登陆,会写硬盘
//设置cookie的保存路径
cookie_username.setPath(request.getContextPath()+"/");
cookie_password.setPath(request.getContextPath()+"/");
//写cookie
response.addCookie(cookie_username);
response.addCookie(cookie_password);
}
第四步:login.jsp页面自动登陆判断
<%
//进行自动登陆的代码
//思路:1.获取cookie 2.从cookie中获取username password 3.如果不为空,那么合法 4.把username放入session 5.那么跳转到首页面
//1.获取cookie
Cookie[] cookies=request.getCookies();
//2.从cookie中获取username password
String username=null;
String password=null;
if(cookies!=null)
{
for(Cookie c:cookies)//Cookie cookie_password=new Cookie("password", password);
{
if("username".equals(c.getName()))
{
username=c.getValue();//zhangsan
}
if("password".equals(c.getName()))
{
password=c.getValue();//123
}
}
}
//3.如果不为空,那么合法
if(username!=null&&password!=null&&!"".equals(username)&&!"".equals(password))
{
//4.把username放入session
session.setAttribute("username", username);
//5.那么跳转到首页面
request.getRequestDispatcher("/user/index.jsp").forward(request, response);
}
//
%>