點選頁面先登入,登入後繼續之前頁面
阿新 • • 發佈:2019-01-04
登入諸如噹噹網之類的購物網站,未登入前可以先將產品放入購物車,當點選結賬的時候會先跳出登入頁面,登入後,繼續跳至結賬頁面。一直想寫一個類似的demo,終於昨天寫了一個,記錄下來。
先看程式碼吧,看完再講程式碼。
程式碼塊
後臺
包含兩個servlet,一個domain物件。
CheckLogin.java
package com.login; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class CheckLogin */ @WebServlet("/res/viaLogin") public class CheckLogin extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public CheckLogin() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); User user = (User)session.getAttribute("user"); String url = request.getParameter("url"); if (!"".equals(url)) { session.setAttribute("url", url); } if (null != user){ request.getRequestDispatcher("myOrder.jsp").forward(request, response); } else { request.getRequestDispatcher("login.jsp").forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
LoginServlet.java
package com.login; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class LoginServlet */ @WebServlet("/res/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); User user = new User(); session.setAttribute("user", user); String url = (String) session.getAttribute("url"); if (null == url || "".equals(url)) { request.getRequestDispatcher("main.jsp").forward(request, response); } else { request.getRequestDispatcher(url).forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
User.java
package com.login;
public class User {
}
前臺頁面
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Register</title> </head> <body> <center> <form action="login"> <table> <caption>登陸</caption> <tr> <td>username</td><td><input name="username" /></td> </tr> <tr> <td>password</td><td><input name="password" type="password"/></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Submit" /></td> </tr> </table> </form> </center> </body> </html>
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Main</title>
</head>
<body>
<center> This is main jsp <br><br>
<a href="#" onclick="myOrder(this)">我的訂單</a><br><br>
<a href="login.jsp">登陸</a>
</center>
<script type="text/javascript">
function myOrder(obj) {
var url = "myOrder.jsp";
window.location.href = "viaLogin?url=" + url;
}
</script>
</body>
</html>
myOrder.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MyOrder</title>
</head>
<body>
<center><h1>我的訂單,登陸後可見</h1></center>
</body>
</html>
頁面效果
主頁面
登入頁面
我的訂單頁面
程式碼講解
首頁面包含內容
<center> This is main jsp <br><br>
<a href="#" onclick="myOrder(this)">我的訂單</a><br><br>
<a href="login.jsp">登陸</a>
</center>
<script type="text/javascript">
function myOrder(obj) {
var url = "myOrder.jsp";
window.location.href = "viaLogin?url=" + url;
}
</script>
其中點選我的訂單時,請求登入驗證,同時將我的訂單頁面的URL傳遞至後臺。
登入驗證servlet CheckLogin.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");
String url = request.getParameter("url");
if (!"".equals(url)) {
session.setAttribute("url", url);
}
if (null != user){
request.getRequestDispatcher("myOrder.jsp").forward(request, response);
} else {
request.getRequestDispatcher("login.jsp").forward(request, response);
}
}
先獲取session,然後在session中獲取該user物件。
同時,將URL後面的引數項url,即本應該跳轉到的頁面儲存在session中。
若user物件不為空,則直接跳轉至我的訂單myOrder.jsp頁面;如果user為空,則跳轉至登入頁面login.jsp頁面。
登入servlet LoginServlet.java
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
User user = new User();
session.setAttribute("user", user);
String url = (String) session.getAttribute("url");
if (null == url || "".equals(url)) {
request.getRequestDispatcher("main.jsp").forward(request, response);
} else {
request.getRequestDispatcher(url).forward(request, response);
}
}
登入處理,new一個user出來,這裡只是做示例,沒有給user定義屬性資訊等,將user儲存在session中,同時從session中獲取到之前存放的url。
判斷 url是否為null 或 空字串:
如果是null或空字串,則說明上一步的操作就是登入操作,這時候跳轉至主頁面main.jsp;
如果url不為null,則說明上一步應該是在訪問某個頁面,但是因為沒有登入,被攔截到了登入頁面,此時登入後,就應該繼續之前的請求。
以上例子疏於整理,校驗,如有不詳盡之處,煩請提出,後面必改正,謝謝。