JavaWeb的登陸與注銷功能


JavaWeb 登錄與注銷

大致流程

一般我們在Web應用中 登錄頁面一般是以 login.jsp的首頁

大致流程如下:

當我們在前台寫入用戶名和密碼之后,點擊登錄按鈕

會將表單提交給一個LoginServlet

讓它去驗證用戶名和密碼是否正確

  1. 用戶名或密碼錯誤 重新返回登陸頁面 並提示
  2. 登陸成功后 會進入自己WEB-INF的網頁

進入系統里的網頁后 有用戶自己的信息顯示

點擊注銷按鈕 實現注銷 重新回到登陸頁面

登錄

當點擊提交按鈕 會給LoginServlet處理請求 調用service方法

登陸成功后 會將個人信息放到Session 用於傳遞用戶數據

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.setCharacterEncoding("UTF-8");
		// 1. 獲取請求參數  得到輸入的用戶名和密碼
		String username = req.getParameter("username");
		String pwd = req.getParameter("password");
		// 2. 業務邏輯
		User user = dao.getUserByUserName(username);
		// 3. 控制頁面跳轉
		if (user == null) {
			req.setAttribute("errorMes","用戶不存在");
			req.getRequestDispatcher("/login.jsp").forward(req, resp);
			return;
		}
		// 驗證密碼
		if (!user.getPassword().equals(pwd)) {
			req.setAttribute("errorMes","用戶或密碼錯誤");
			req.getRequestDispatcher("/login.jsp").forward(req, resp);
			return;
		}
		// 此時 用戶名 和密碼正確  共享用戶信息 進入跳轉頁面
		req.getSession().setAttribute("USER_IN_SESSION", user);
		resp.sendRedirect("/product");
		
	}

上述代碼中dao.getUserByUserName(username) 方法是通過查詢數據庫用戶名得到一個用戶

public User getUserByUserName(String username) {
		String sql = "SELECT * FROM t_user WHERE username = ?";
		
		// 返回一個User對象
		return JdbcTemplate.query(sql, new IResultSetHandler<User>() {

			@Override
			public User handle(ResultSet rs) throws SQLException {
				User user = new User();
				while(rs.next()) {
					user.setId(rs.getLong("id"));
					user.setUsername(rs.getString("username"));
					user.setPassword(rs.getString("password"));
					return user;
				}
				return null;
			}
		}, username);
	}

dao.getUserByUserName(username) 方法使用到了JDBC的查詢操作

所以調用了JdbcTemplate.query方法

public static <T> T query(String sql,IResultSetHandler<T> rsh,Object...params){
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtil.getConnection();	//連接
			ps = conn.prepareStatement(sql);	//語句對象
			// 設置占位符值
			for (int i = 0; i < params.length; i++) {
				ps.setObject(i+1, params[i]);
			}
			
			rs = ps.executeQuery(); 	//執行語句對象
			// 調用結果集處理器的handle方法 返回一個結果
			return rsh.handle(rs);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			// 釋放資源
			JdbcUtil.close(conn, ps, rs);
		}
		return null;
	}

防止沒有登陸直接訪問 處理系統內部的Servlet 在該Servlet中加一個判斷

如果沒有登陸 Session沒有USER_IN_SESSION這個屬性

則返回到登陸首頁

// 根據USER_IN_SESSION 有無 判斷此時用戶是否 登陸 若無 則不能直接訪問該頁面 
		Object user = req.getSession().getAttribute("USER_IN_SESSION");
		if (user == null) {
			resp.sendRedirect("/login.jsp");
			return;
		}

注銷

當點擊注銷按鈕時 進入LoginServlet處理

可以讓按鈕帶個參數 讓Servlet調用注銷方法

<a href="/login?method=logout">注銷</a>

在LoginServlet的service方法中加入如下代碼:

// 注銷功能
		String method = req.getParameter("method");
		if ("logout".equals(method)) {
			logout(req,resp);
			return;
		}

注銷:銷毀用戶Session 跳轉到登陸頁面

private void logout(HttpServletRequest req, HttpServletResponse resp) {
		// 銷毀session  跳到登陸頁面
		req.getSession().invalidate();
		try {
			resp.sendRedirect("/login.jsp");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM