案例需求描述
案例準備
《登陸頁面示例(包含請求轉發、重定向解析及MVC應用)》文章中相關資源引入,並修改相應配置,微調。
代碼實現——登陸頁面完善
- 登錄頁,登陸成功後添加保存用戶信息步驟
//4.頁面展示
if(existUser == null) {
//登錄失敗
//向request域中保存一個錯誤信息
request.setAttribute("msg", "用戶名或密碼錯誤!");
//使用請求轉發進行頁面跳轉
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else {
//登陸成功 重定向
//保存用戶登陸數據:保存到會話當中。
HttpSession session = request.getSession();
session.setAttribute("existUser", existUser);
response.sendRedirect("/web_cookie/success.jsp");
}
- 登陸成功頁面,登陸判斷
<%
if(request.getSession().getAttribute("existUser") == null){
%>
<h1>您還未登錄,請先<a href = "/web_cookie/login.jsp">點擊登錄</a></h1>
<%
}else{
User existUser = (User)request.getSession().getAttribute("existUser");
%>
<h1>用戶登錄成功頁面</h1>
<h3>歡迎您,<%= existUser.getNickname() %></h3>
<%
}
%>
代碼實現——一次性驗證碼
- 百度一個生成一次性驗證碼圖片的servlet文件,做微調,目的是取得生成驗證碼的字符串,用來校驗登錄。
- 校驗一次性驗證碼(在loginServlet中)
//一次性驗證碼的校驗
//接收驗證碼
String checkcode1 = request.getParameter("checkcode");
//從Session中獲取一次性驗證碼的值
String checkcode2 = (String) request.getSession().getAttribute("checkCode");
//爲了保證驗證碼只使用一次,應該將session中的驗證碼值清空
request.getSession().removeAttribute("checkCode");
//校驗一次性驗證碼
if(!checkcode1.equalsIgnoreCase(checkcode2)) {
request.setAttribute("msg", "驗證碼輸入錯誤");
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
- 一次性驗證碼的點擊切換
首先在登錄頁面添加點擊事件
其次,利用js函數修改生成圖片的src即可,time爲了改變提交的參數,防止瀏覽器讀取相同路徑的緩存,這樣驗證碼就不會改變了。
代碼實現——記住用戶名
如果在登陸的過程中,將記住登錄名的複選框勾選了,並且在登陸成功的情況下,需要記住用戶名,在關閉瀏覽器下次訪問的時候,會在用戶名文本框中自動呈現出用戶名。
- 後臺代碼(LoginServlet文件)
//記住用戶名的後臺代碼:
//判斷複選框是否已經勾選
String remember = request.getParameter("remember");
if("true".equals(remember)) {
//說明勾選了
Cookie cookie = new Cookie("username", existUser.getUsername());
//設置有效路徑:
cookie.setPath("/web_cookie");
//設置有效時長:
cookie.setMaxAge(60*60*24*7); //7天
//cookie回寫到瀏覽器
response.addCookie(cookie);
}
- 在頁面的文本框中回顯用戶名(login.jsp文件,使用EL表達式,添加了value屬性)
<tr>
<td>用戶名</td>
<td><input type="text" name="username" value="${cookie.username.value}"></td>
</tr>
代碼實現——系統退出
- 提供一個退出的鏈接(success.jsp文件下)
<h1>用戶登錄成功頁面</h1>
<h3>歡迎您,<%= existUser.getNickname() %><a href="/web_cookie/logoutServlet">退出</a></h3>
- 新建logoutServlet文件
//銷燬session
request.getSession().invalidate();
//頁面跳轉
response.sendRedirect("/web_cookie/success.jsp");