【JavaWeb实现数据库应用系统】2020年4月29日进度(计划)

4月29日更新:


因为要实现管理员和用户的界面,所以今天先来实现登陆的界面:

  • 其中login.jsp就是我们要用到的登陆界面了。
    设计思路:
    1.可以在登录界面添加一个图片,优化界面;
    2.登陆失败时候跳转回登陆界面,并给用户反馈;
    3.登陆成功自动判断是管理员或者不是管理员;
    4.管理员与非管理员跳转不同的界面;
    5.待添加功能:验证码、注册

  • 具体实现如下:
    因为要实现登录功能,所以需要连接一下数据库(新建张User表)这里我们用到Navicate数据库可视化工具来连接MySQL数据库。
    (1)表包含三条属性:用户名、密码、是否为管理员;
    (2)户名可以是英文大小写,或者数字,不可以为中文,在后面注册时候会判断;
    (3)注意密码的长度,不超过16位长度;
    (4)用户名为主键,不可重复,数据都不能为空;
    (5)注册时候默认不是管理员(0),需要申请管理员;

--创建User表
create table User
(
	user_name varchar(255) not null,
	pass_word varchar(20) not null,
	--管理员默认为0;
	is_admin 	smallint default 0 not null,
	primary key(user_name)
)
  • 表创建好,接着来连接数据库(DBConnect.java):
    代码很简单,就不做介绍(注释里面有)代码如下:
package db_connect;

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

public class DBConnect {
	
	//连接数据库
	private static String DRIVER = "com.mysql.jdbc.Driver";//驱动
	private static String URL = "jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8";//防止中文乱码
	private static String USERNAME = "用户名";
	private static String PASSWORD = "密码";
	private static Connection connection = null;
	
	Statement statement = null;
	ResultSet result= null;
	
	static {
		try {
			//导入驱动,加载具体的驱动类
			Class.forName(DRIVER);
			System.out.println("连接数据库中...");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() {
		
		try {
			connection = (Connection) DriverManager.getConnection(URL , USERNAME , PASSWORD);
			System.out.println("数据库连接成功!");
		}catch(SQLException e) {
			System.out.println("数据库连接失败!");
			e.printStackTrace();
		}
		return (Connection) connection;
	}
}

添加main方法,进行测试:

public static void main(String [] args) {
		getConnection();
	}

在这里插入图片描述

  • 数据库已经连接完成,接下来我们就需要将数据取出到结果集,然后与用户输入的信息进行对比就可,所以,来设计用户登录和注册界面
    效果如下:
    在这里插入图片描述
  • 如果登陆失败效果如下:
    在这里插入图片描述
  • 如果某项不输入的话,提示用户:在这里插入图片描述
  • 代码如下(login.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="util.CookieUtil" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body background="pic\login.jpg" style=" 
		background-repeat:no-repeat ;
		background-size:100% 100%;
		background-attachment: fixed;">
	<br><br><br><br><br> 
	<div class = "div0">
	<%	
		String username = CookieUtil.getCookie("username",request);
		String user = (String)request.getAttribute("msg");
		if(user != null){
			out.println(user);
		}
	%>
	<br><br>
		<center><span style="color:red">欢迎使用数据库管理系统</span></center><br>
		<center><span style="color:red">请先登录</span></center><br>
	
	</div>
	 <div class="div1">   
        <form action="LoginServlet" method="post">  
            <input type="text" required="required" placeholder="用户名" name="username"></input>  <br>
            <input type="password" required="required" placeholder="密码" name="password"></input>  <br>
            <button class="but" type="submit">登录</button>  
        </form>  
    </div>  
    
    <style>
    
    .div0{
    	color:red;
    	text-align:center;
    	margin:0 auto;
    	font-size: 20px;
    	text-shadow:1px 1px 1px; 
    }
    
    .div1{
    		text-align:center;
  			margin:0 auto;
		    width: 300px;   
		    height: 300px;  
    }
    
    
    .but{   
	    width: 300px;   
	    min-height: 20px;   
	    display: block;   
	    background-color: #4a77d4;   
	    border: 1px solid #3762bc;   
	    color: #fff;   
	    padding: 9px 14px;   
	    font-size: 15px;   
	    line-height: normal;   
	    border-radius: 5px;   
	    margin: 0;   
	}  
	
	input{   
	    width: 278px;   
	    height: 18px;   
	    margin-bottom: 10px;   
	    outline: none;   
	    padding: 10px;   
	    font-size: 16px;   
	    color: blue;   
	    text-shadow:1px 1px 1px;   
	    border-top: 1px solid #312E3D;   
	    border-left: 1px solid #312E3D;   
	    border-right: 1px solid #312E3D;   
	    border-bottom: 1px solid #56536A;   
	    border-radius: 4px;   
	}   
	    
    </style>

</body>
</html>
  • 那么接下来我们肯定要将用户输入和数据库中下信息进行对比,我们将数据库中的所有信息取出来(我们先添加几条数据):
--添加几条测试数据到User表
insert into User 
	values('zhang','123456',1);
insert into User
	values('wang','123456',0);
insert into User
	values('zheng','123456',0);

在这里插入图片描述

  • 接下来我们就要将数据取出来(放到结果集中)然后遍历所有数据,判断是否存在用户输入的数据,代码如下(LoginServlet.java):
package Servlet;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.mysql.jdbc.Connection;

import db_connect.DBConnect;

public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		
		int success = 0;//判断是否登录成功
		
		DBConnect dbConnect = new DBConnect();
		Connection connection = (Connection) DBConnect.getConnection();
		Statement statement = null;		
		ResultSet resultSet = null;
		
		String username = (String)request.getParameter("username");
		String password = (String)request.getParameter("password");
		String path = "";
		String msg = "";
		System.out.println("username" + username + "/n" + "password" + password);
		
		try {
			statement = (Statement) connection.createStatement();
		}catch(SQLException e) {
			e.printStackTrace();
		}
		//查询语句
		String sql = "select * from User";
		
		try {
			//将所有信息存入结果集
			resultSet = statement.executeQuery(sql);
		}catch(SQLException e) {
			e.printStackTrace();
		}
		
		try {
			
			while(resultSet.next()) {
				String user_name = resultSet.getString("user_name");
				String pass_word = resultSet.getString("pass_word");
				int is_admin = resultSet.getInt("is_admin");
				//判断用户信息正误
				if(user_name.equals(username) && pass_word.equals(password)) {
					
					Cookie cookie = new Cookie("username" , username);
					//设置生存周期:
					cookie.setMaxAge(60*60*24*7);
					
					HttpSession session = request.getSession();
					session.setAttribute("user", username);
					
					response.addCookie(cookie);
					
					//判断是否为管理员
					
					if(is_admin == 1)	path = "admin.jsp";
					else path = "user.jsp";
					//找到了就应该退出循环:
					success = 1;
					break;
				}else {
					//登陆失败,返回登陆页面,并发出提示
					success = 0;
				}
			}
		
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if(success == 0) {
			path = "login.jsp";
			msg = "Username or Password Error!";
		}
		request.setAttribute("username", username);
		request.setAttribute("msg", msg);
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(path);
		
		dispatcher.forward(request, response);
	}

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

}

  • 测试效果如下:
  1. 管理员登陆:
    在这里插入图片描述

在这里插入图片描述

  1. 正常用户登录:
    在这里插入图片描述

在这里插入图片描述

用户和管理员页面暂时还没做好,先设计一下,明天继续。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值