设计一个登录页面login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/31/LoginServlet">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="checkbox" name="tenDayAutoLogin" value="ok">十天内免登录 <br>
<input type="submit" value="登录">
</form>
</body>
</html>
登录LoginServlet.java文件:
package Cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户名和密码
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
//jdbc链接数据库验证用户名和密码
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String realname=null;
boolean loginSuccess=false;
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3366/db1","root","123");
String sql = "Select id,username,password,realname from t_user where username=? and password=?";
ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs=ps.executeQuery();
if(rs.next()){
loginSuccess=true;
realname=rs.getString("realname");
}
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(loginSuccess){
//登录成功以后,判断用户是否选择了10天内免登陆
String tenDayAutoLogin = request.getParameter("tenDayAutoLogin");
if("ok".equals(tenDayAutoLogin)){
//创建Co对象
Cookie cookie1 = new Cookie("username",username);
Cookie cookie2 = new Cookie("password",password);
//设置Cookie对象的有效时间
cookie1.setMaxAge(60*60*24*10);
cookie2.setMaxAge(60*60*24*10);
//设置关联路径
cookie1.setPath(request.getContextPath());
cookie2.setPath(request.getContextPath());
//发送Cookie给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
//登录成功跳转到成功页面
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head>");
out.print("<title>欢迎页面</title>");
out.print("</head>");
out.print("<body>");
out.print("欢迎");
out.print(realname);
out.print("</body>");
out.print("</html>");
}else {
//登录失败跳转到失败页面
response.sendRedirect(request.getContextPath()+"/fail.html");
}
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
如果选择了十天内免登陆按钮,直接跳转到欢迎页面,欢迎页面是一个Servlet,Index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!--欢迎页面直接跳转到Servlet,将Servlet直接设为欢迎页面-->
<meta http-equiv="refresh" content="0;url=/31/CheckLoginStatusServlet">
<title>Title</title>
</head>
<body>
</body>
</html>
欢迎页面的CheckLoginStatusServlet.java文件:
package Cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
@WebServlet("/CheckLoginStatusServlet")
public class CheckLoginStatusServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request中获取Cookie
Cookie[] cookies = request.getCookies();
String username=null;
String password=null;
if(cookies!=null){
for(Cookie cookie:cookies){
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
if("username".equals(cookieName)){
username=cookieValue;
}else if("password".equals(cookieName)){
password=cookieValue;
}
}
}
if(username!=null&&password!=null){
//链接数据库jdbc验证用户名和密码
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
boolean loginSuccess=false;
String realname=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3366/db1","root","123");
String sql = "Select id,username,password,realname from t_user where username=? and password=?";
ps=conn.prepareStatement(sql);
ps.setString(1,username);
ps.setString(2,password);
rs=ps.executeQuery();
if(rs.next()){
loginSuccess=true;
realname=rs.getString("realname");
}
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(loginSuccess){
//登录成功跳转到成功页面
response.setContentType("text/html;charset=UTF-8");
//登录成功跳转到成功页面
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<html>");
out.print("<head>");
out.print("<title>欢迎页面</title>");
out.print("</head>");
out.print("<body>");
out.print("欢迎");
out.print(realname);
out.print("</body>");
out.print("</html>");
}else {
//登录失败跳转到失败页面
response.sendRedirect(request.getContextPath()+"/fail.html");
}
}
}else{
//跳转到登录页面
response.sendRedirect(request.getContextPath()+"/login.html");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}