思路:
创建表单
在操作表单数据之前,首先判断磁盘中是不是存在需要cookie(这里指的是用户名信息)
获取到表单内容,创建cookie,核对登录信息,登录失败,不做任何操作 登录成功,对复选框进行判断,如果选中,记住用户名,否则删除用户名
建立servlet,名字为LoginUI
package com.itheima.login;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.registry.infomodel.User;
public class LoginUI extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/**
* 得到缓存中的数据
*/
//设置编码
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String user = "";//用来存储缓存中取出的用户名
String check="";//用来给复选框赋值
Cookie[] cook = request.getCookies();//得到缓存中的值
for (int i = 0;cook!=null && i < cook.length; i++) {//判断缓存是不是为空和长度是不是到末尾了。如果等于空,代表缓存中没有值
if("cookinfo".equals(cook[i].getName())){//如果缓存中的名字和取出来的名字是一一致的,
user = cook[i].getValue();//取出缓存中的值
check= "'checked=checked'";//默认选中复选框
}
}
out.write("<form action='"+request.getContextPath()+"/servlet/loginservlet' method='post'/>");
out.write("user:<input type='text' name ='user' value="+user+" ><br>");
out.write("passsword:<input type = 'password' name ='pwd' > <br/>");
out.write("<input type= 'checkbox' name = 'check'"+check+"/>记住密码<br/>");
out.write("<input type = 'submit' value ='提交'/>");
out.write("</form>");
/*
* 遇到的问题,
编码问题,对编码的语法不熟悉。写错了
获取路径不对,原因是web.xml中的路径写错了。
*/
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
在创建一个servlet 名字为 LoginDemo
package com.itheima.login;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
/**
* 处理数据
*/
//获取表单数据
String user = request.getParameter("user");
String pwd = request.getParameter("pwd");
//这里本来是需要是用getParameterValues的到复选框中的值,
//但是。getParameterValues是得到这个复选框中值的内容。
//我这里,不需要内容,只需判断,这个复选框有没有被选中,
//如果被选中,值就是on,没有被选中,值就是null
String check = request.getParameter("check");
//处理业务逻辑
//分发转向
Cookie ck = new Cookie("cookinfo",user);
//使用数据库中的值和表单的值做比较
if("tom".equals(user)&&"123".equals(pwd)){
out.write("登录成功");
//如果这复选框中的值不为空,代表复选框是选中状态,那么就把这个值个存起来
if(check!=null){
ck.setMaxAge(Integer.MAX_VALUE);
}else{
//如果值空,就把cookie中所对应的值个删除
ck.setMaxAge(0);
}
//设置自动跳转到登录页面
response.setHeader("refresh", "3;url="+request.getContextPath()+"/servlet/loginui");
//response.setHeader("referesh", "3;url='"+request.getContentType()+"/servlet/loginui'");
}else{
out.write("登录失败");
//设置自动跳转到登录页面
response.setHeader("refresh", "3;url="+request.getContextPath()+"/servlet/loginui");
}
//不管这个cookie中有没有值,都需要响应个服务器
response.addCookie(ck);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<servlet>
<servlet-name>LoginDemo</servlet-name>
<servlet-class>com.itheima.login.LoginDemo</servlet-class>
</servlet>
<servlet>
<servlet-name>LoginUI</servlet-name>
<servlet-class>com.itheima.login.LoginUI</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginDemo</servlet-name>
<url-pattern>/servlet/loginservlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginUI</servlet-name>
<url-pattern>/servlet/loginui</url-pattern>
</servlet-mapping>
</web-app>