1. 程式人生 > >點選頁面先登入,登入後繼續之前頁面

點選頁面先登入,登入後繼續之前頁面

    登入諸如噹噹網之類的購物網站,未登入前可以先將產品放入購物車,當點選結賬的時候會先跳出登入頁面,登入後,繼續跳至結賬頁面。一直想寫一個類似的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,則說明上一步應該是在訪問某個頁面,但是因為沒有登入,被攔截到了登入頁面,此時登入後,就應該繼續之前的請求。

以上例子疏於整理,校驗,如有不詳盡之處,煩請提出,後面必改正,謝謝。