家居網購專案實作07
以下皆為部分代碼,詳見 https://github.com/liyuelian/furniture_mall.git
16.功能15-會員顯示登錄名
16.1需求分析/圖解
- 會員登錄成功
- login_ok.jsp顯示歡迎資訊
- 回傳首頁,顯示登錄相關選單,如果有登錄過,顯示如上資訊
- 如果用戶沒有登錄過,網站首頁就顯示 登錄/注冊 超鏈接
16.2思路分析
16.3代碼實作
dao和service層不變,在之前實作的MemberServlet中,修改login方法:
如果用戶登錄成功,創建session,在session中設定member資訊,請求轉發到登錄成功頁面login_ok.jsp,在該頁面中顯示用戶資訊,
MemberServlet.login():
/**
* 處理會員登錄業務
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.接收用戶名和密碼
//如果前端輸入的是null,后臺接收的資料為空串""
String username = request.getParameter("username");
String password = request.getParameter("password");
//構建一個member物件
Member member = new Member(null, username, password, null);
//2.呼叫MemberServiceImpl的login方法
if (memberService.login(member) == null) {//資料庫中沒有該用戶,回傳登錄頁面
//登錄失敗,將錯誤資訊和登錄會員名放入request域中
request.setAttribute("errInfo", "登錄失敗,用戶名或者密碼錯誤");
request.setAttribute("username", username);
//注意路徑
request.getRequestDispatcher("/views/member/login.jsp")
.forward(request, response);
} else {//登錄成功
//創建session,將jsessionid作為cookie回傳給瀏覽器
HttpSession session = request.getSession();
session.setMaxInactiveInterval(1800);//設定生命周期為30分鐘
//將得到的member物件放入session域物件中
session.setAttribute("member", member);
//跳轉到登錄成功頁面
request.getRequestDispatcher("/views/member/login_ok.jsp")
.forward(request, response);
}
}
在前端jsp頁面中,如果沒有在session域物件中獲取到member物件,就顯示登錄注冊鏈接,否則顯示登錄用戶資訊(這里先不實作過濾)
views/customer/index.jsp
<!-- Single Wedge Start -->
<%--根據用戶登錄的狀態顯示不同選單--%>
<%--如果未登錄--%>
<c:if test="${empty sessionScope.member}">
<div >
<a href="https://www.cnblogs.com/liyuelian/archive/2022/12/23/views/member/login.jsp">登錄|注冊</a>
</div>
</c:if>
<%--如果已登錄--%>
<c:if test="${not empty sessionScope.member}">
<div >
<a> 歡迎:${sessionScope.member.username}</a>
</div>
<div >
<a href="https://www.cnblogs.com/liyuelian/archive/2022/12/23/#">訂單管理</a>
</div>
<div >
<a href="https://www.cnblogs.com/liyuelian/archive/2022/12/23/#">安全退出</a>
</div>
</c:if>
<!-- Single Wedge End -->
login_ok.jsp同理
16.4完成測驗
未登錄訪問首頁:
登錄后訪問首頁:
17.功能16-注銷登錄
17.1需求分析/圖解
- 顧客登陸成功后
- login_ok.jsp中點擊安全退出,注銷登錄
- 回傳首index.jsp,也可以點擊安全退出,注銷登錄
17.2思路分析
17.3代碼實作
dao,service層不變
在MemberServlet中實作logout方法
/**
* 處理用戶注銷登錄的請求
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void logout(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//銷毀當前用戶的session
req.getSession().invalidate();
//重定向到index.jsp,目的是重繪首頁
//req.getContextPath()=>/專案名 -默認訪問index.jsp
resp.sendRedirect(req.getContextPath());
}
注意修改安全退出超鏈接的引數action=logout
17.4完成測驗
18.功能17-注冊驗證碼
18.1需求分析/圖解
表單重復提交情況:
- 提交完表單,服務器使用請求轉發進行頁面跳轉,用戶重繪(F5),會發起最后一次的請求,造成表單重復提交問題,解決方案是使用重定向
- 用戶正常提交,由于網路延遲等原因,未收到服務器回應,如果這時用戶重復點擊提交,也會造成表單重復提交問題,解決方案:使用驗證碼
- 用戶正常提交,服務器沒有延遲,但是提交完之后,用戶回退瀏覽器重新提交,也會造成表單重復提交,解決方案:驗證碼
- 惡意注冊,使用可以批量發送http的工具,比如Postman,Jemeter等,解決方案:仍是使用驗證碼防護
18.2思路分析
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540607.html
標籤:其他
上一篇:我的第一篇隨筆
下一篇:01.Java面試都問啥?
