概述
一共兩個頁面
當直接訪問產品列表的時候,會判斷用戶是否登錄,如果用戶沒有登錄,則直接3秒跳轉.
如果用戶登錄,則不進行跳轉
登錄頁面:對於登錄頁面來說,直接輸入用戶名,密碼.和數據庫進行對比,進行登錄.
並進行密碼的本地保存
ps 一般是需要對密碼加密進行本地保存的
代碼如下
配置文件
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>login</servlet-name>
<jsp-file>/Login.jsp</jsp-file>
<init-param>
<param-name>driver</param-name>
<param-value>com.mysql.cj.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://47.94.95.84:32786/test</param-value>
</init-param>
<init-param>
<param-name>user</param-name>
<param-value>test</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>**</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login.html</url-pattern>
</servlet-mapping>
</web-app>
登錄界面
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.DriverManager" %><%--
Created by IntelliJ IDEA.
User: ming
Date: 19-3-13
Time: 下午10:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登錄頁面</title>
</head>
<form action="./login.html" method="post">
<input type="text" name="username" id="username"/>
<input type="password" name="password" id="password"/>
<input type="submit" value="submit"/>
</form>
<script>
// js腳本,讀取客戶端的cookie
let cookie = {};
let all = document.cookie;
let list = all.split(";");
for(let i = 0; i < list.length; i++){
let p = list[i].indexOf("=");
let space = list[i].indexOf(" ");
let name = list[i].substring(space + 1, p);
let value = list[i].substring(p+1);
value = decodeURIComponent(value);
cookie[name]=value;
}
// 填充到value
if(cookie["flage"] == "true") {
document.getElementById("username").setAttribute("value", cookie["user"]);
document.getElementById("password").setAttribute("value", cookie["password"]);
}
</script>
<body>
<%
String dbdriver = config.getInitParameter("driver");
String dburl = config.getInitParameter("url");
String dbuser = config.getInitParameter("user");
String dbpassword = config.getInitParameter("password");
// 連接對象
Connection connection = null;
// 操作
PreparedStatement preparedStatement = null;
// 結果
ResultSet resultSet = null;
// 用戶id
String mid = null;
// 標誌位
boolean falge = false;
try{
Class.forName(dbdriver);
// 獲得連接
connection = DriverManager.getConnection(dburl, dbuser, dbpassword);
// 編寫sql驗證ID 密碼
String sql = "SELECT mid FROM member WHERE name = ? AND password = ?";
// 實例化操作對象
preparedStatement = connection.prepareStatement(sql);
// 設置查詢內容
preparedStatement.setString(1, request.getParameter("username"));
preparedStatement.setString(2, request.getParameter("password"));
// 執行查詢
resultSet = preparedStatement.executeQuery();
// 如果可以查詢到,表示合法用戶
if(resultSet.next()){
mid = resultSet.getString(1);
// 修改標誌位
falge = true;
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
resultSet.close();
preparedStatement.close();
connection.close();
}catch (Exception e){
e.printStackTrace();
}
}
// 判斷是否登錄成功
if(falge){
// 登錄成功
// 保存session 保存cookie
session.setAttribute("mid", mid);
// 保存cookie
Cookie cookieMid = new Cookie("mid", mid);
Cookie cookieUser = new Cookie("user", request.getParameter("username"));
Cookie cookiePassword = new Cookie("password", request.getParameter("password"));
// 增加登錄態cookie
Cookie cookieFlage = new Cookie("flage", "true");
// 客戶端增加Cookie
response.addCookie(cookieMid);
response.addCookie(cookieUser);
response.addCookie(cookiePassword);
response.addCookie(cookieFlage);
// 設置定時跳轉
response.setHeader("refresh", "3;URL=product.jsp");
%>
登錄成功即將跳轉到首頁產品界面
未跳轉點擊<a hre="./product.jsp">點擊此處</a>
<%
}else{
// 查詢用戶是否已經登錄
if(session.getAttribute("mid") == null) {
Cookie cookieFlage = new Cookie("flage", "false");
response.addCookie(cookieFlage);
}
}
%>
</body>
</html>
產品界面
<%--
Created by IntelliJ IDEA.
User: ming
Date: 19-3-14
Time: 下午2:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
此爲商品列表
<script>
// 判斷當前登錄態
// js腳本,讀取客戶端的cookie
let cookie = {};
let all = document.cookie;
let list = all.split(";");
for(let i = 0; i < list.length; i++){
let p = list[i].indexOf("=");
let space = list[i].indexOf(" ");
let name = list[i].substring(space + 1, p);
let value = list[i].substring(p+1);
value = decodeURIComponent(value);
cookie[name]=value;
}
// 獲取登錄狀態
if(cookie["flage"] != "true"){
// 登錄狀態
alert("請您登錄 3秒將會跳轉");
}
</script>
<%
// 服務器端驗證
if(session.getAttribute("mid") == null) {
// 執行頁面跳轉
response.setHeader("refresh", "2;URL=/login.html");
}
%>
</body>
</html>
注意
產品界面通過本地cookie和服務器的session進行雙向驗證.