基於jsp+servlet完成的用戶登錄


采用jsp和servlet完成登錄案例、意在熟悉三層架構模式。

  1. 首先創建實體類 User  ,本類就封裝了用戶名、密碼和性別、生成對應的getter和setter方法、及toString方法。
  2. 其次設計與之對應的數據庫。
  3. 接下來是設計UserDao接口,接口中有一個[抽象]方法。登錄方法,因為是根據用戶名和密碼進行查詢登錄、返回必然是一個用戶User,所以返回值類型為User。
  4. 接下來是設計UserDaoImpl實現類、因為實現類需要實現UserDao接口中全部未實現的方法,則需要覆寫login方法
  5. UserDaoImpl是處理SQL語句的增刪改查的地方,但是在處理之前必須要先獲取到數據庫的連接開關。
  6. JdbcUtil就是控制數據庫的連接開關。本類是一個工具類、工具類則大致全都是使用的靜態化...目的在於調用起來更加方便
  7. UserDaoImpl調用JdbcUtil、就可以獲取數據庫的連接,有了連接。即con! 則可以進行增刪改查操作。通過con 鏈接創建一個執行SQL語句的對象:Statement對象!通過st“執行查詢”的方法,參數為SQL語句、返回值為結果集ResultSet。

     判斷 結果集中 有沒有 數據 : 

          |--- 有數據: 取到兩個數據: Username  和 Password 封裝到user,因為返回值類型是User。

          |--- 無數據:  返回 null! 思考:返回給誰? 誰調用、返回給誰。  這里是UserDao接口調用的、所以返回給了UserDao接口。

  8. 將結果(user或者null)返回給UserServiceImpl   ,此時UserServiceImpl    里了數據(數據可能為user或者null)

  9. UserServiceImpl 將數據(數據可能為user或者null)返回給UserService

  10. UserService 將數據(數據可能為user或者null)返回給UserServlet 

  11.UserServlet 接受到數據。如下:User u = userService.userLogin(username, password);//u可能為前面傳遞過來的user或是null

    進行判斷

      如果是user  調整到成功!

      如果是null  跳轉到失敗頁面

1.  建類  實體類 User  

package cn.javabs.usermanager.entity;
/**
 * 設計  用戶  的實體類
 * @author Mryang
 *
 */
public class User {

	private Integer id;
	
	private String username;
	
	private String password;
	
	private String sex;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password="
				+ password + ", sex=" + sex + "]";
	}
	
}

   2. 設計數據庫 與 實體類的變量一一對應

-- 創建數據庫  名稱是usermanager
create database  usermanager;

-- 使用 數據庫

use  usermanager;

-- 建表
create table user(
	
	id int primary key auto_increment, -- id 是整型  主鍵、 自動遞增

	username varchar(50) not null unique,-- not null unique 不許為空  唯一

	password varchar(50) not null , 
	
	sex varchar(10)
);

  3. dao

package cn.javabs.usermanager.dao;

import cn.javabs.usermanager.entity.User;

/**
 * 用戶的dao接口的設計
 * @author Mryang
 *
 */
public interface UserDao {
	
	/**
	 * 用戶登錄功能
	 * @param username 參數  為用戶名
	 * @param password 參數 為密碼
	 * @return  user
	 */
	User login(String username , String password);
	
}

  4.設計UserDao接口的實現類UserDaoImpl

package cn.javabs.usermanager.dao.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import cn.javabs.usermanager.dao.UserDao;
import cn.javabs.usermanager.entity.User;
import cn.javabs.usermanager.exception.UserLoginException;
import cn.javabs.usermanager.util.JdbcUtil;
/**
 * userdao的實現類
 * @author Mryang
 *	調用 jdbc
 *
 *靜態方法優於構造方法先執行
 *
 */
public class UserDaoImpl implements UserDao {

	
	@Override
	public User login(String username, String password) {
		
		
		try {
			
			Connection con = JdbcUtil.getConnection();
			
			Statement st = con.createStatement();
			
			ResultSet rs = st.executeQuery("select * from  user  where username = '"+username+"'  and password = '"+password+"';");
			
			if(rs.next()){
				User user =  new User();
				
				user.setUsername(rs.getString("username"));
				user.setPassword(rs.getString("password"));
				
				System.out.println("userDao中的user的內容是"+ user);
				
				return user;
			}else{
				return null;
			}
			
			
		} catch (SQLException e) {
			throw  new UserLoginException();
		}
		
		
		
	}
			
			
			

}

  

5. 設計工具類  jdbc:

package cn.javabs.usermanager.util;

import java.sql.Connection;
import java.sql.DriverManager;
/**
 * 因為要使用類名[點]方法名稱  所有 方法需要被靜態化
 * @author Mryang
 * --------------------------------------------------------------------------------------
 * 反射的三種方式: 	1. Class.forName() 2. xxx對象.getClass(); 3. Xxx.class()
 * --------------------------------------------------------------------------------------
 * 
 *
 */
public class JdbcUtil {

	private static String  driver ="com.mysql.jdbc.Driver";// 數據庫驅動類
	private static String  url ="jdbc:mysql://localhost:3306/usermanager";// 數據庫鏈接
	private static String  user ="root";// 數據庫用戶名
	private static String  password ="sorry";// 數據庫密碼
	
	// 權限修飾符  靜態修飾符   返回值類型  方法名稱
	/**
	 * 獲取鏈接的
	 * @return conn
	 */
	public static Connection getConnection() {
	
		try {
			//1. 類加載
			Class.forName(driver);
		//2. 驅動管理獲取鏈接\三個參數\  接收
			Connection conn = DriverManager.getConnection(url, user, password);
			return conn;
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	// TODO 關閉鏈接沒寫
	
	
}

  7.設計service接口

package cn.javabs.usermanager.service;

import cn.javabs.usermanager.entity.User;

public interface UserService {


	/**
	 * 用戶登錄功能
	 * @param username 參數  為用戶名
	 * @param password 參數 為密碼
	 * @return  user
	 */
	User userLogin(String username , String password);
	
	
}

  8.設計UserService的實現類

package cn.javabs.usermanager.service.impl;

import cn.javabs.usermanager.dao.UserDao;
import cn.javabs.usermanager.dao.impl.UserDaoImpl;
import cn.javabs.usermanager.entity.User;
import cn.javabs.usermanager.service.UserService;

public class UserServiceImpl implements UserService {
	
	// 采用多態的形式進行實例化dao  
	UserDao dao = new  UserDaoImpl();
	
	@Override
	public User userLogin(String username, String password) {
		//dao代表的是UserDao 這個接口
//		.login  用這個接口中的用戶登錄功能  並且傳了兩個參數給你
		return dao.login(username, password);
	}

}

  9. 設計jsp的登錄頁面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
  </head>
  
  <body>
   		<center>
	   			<form action="<%=basePath%>servlet/UserLoginServlet" method="post" >
				<table border="1px" width="438px"   >
					<tr align="center">
						<td>用戶名</td>
						<td>
							<input type="text" name="username" >
						</td>
					</tr>
					<tr align="center">
						<td>密碼</td>
						<td>
							<input type="password" name="password" >
						</td>
					</tr>
					<tr align="center">
						<td colspan="2" >
							<input type="submit" value="用戶登錄" >
							  
							<input type="reset" value="重置內容" >
						</td>
					</tr>
				</table>   			
	   		</form>
   		</center>
  </body>
</html>

  10.設計servlet

package cn.javabs.usermanager.web.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.javabs.usermanager.entity.User;
import cn.javabs.usermanager.service.UserService;
import cn.javabs.usermanager.service.impl.UserServiceImpl;

public class UserLoginServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		/*
		 * 1 set encoding
		 */
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		
		/*
		 * 2. get 前台  的  參數
		 */
		String username = request.getParameter("username");
		String password = request.getParameter("password");
	
		/*
		 * 3. 將獲取到的用戶名和密碼傳遞給 userService!
		 * 所以 得有  userService  沒有  怎么  辦?  實例化  就有了 
		 */
		UserService userService = new UserServiceImpl();
		
		User u = userService.userLogin(username, password);
		
		if(u == null){
			response.getWriter().write("您的用戶名或密碼有誤,請檢查!");
			response.setHeader("Refresh", "5;Url="+ request.getContextPath());
		}else{
			request.setAttribute("mark", "用戶登錄成功!");
			request.getRequestDispatcher("/message.jsp").forward(request, response);
		}
	
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet( request,  response);
	}

}

  11設計一個體系頁面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

  		<h1 style="color: red;">	<%= request.getAttribute("mark") %></h1>
  </body>
</html>

  

 

 

  

 


免責聲明!

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



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