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);
}
}
- 测试效果如下:
- 管理员登陆:
- 正常用户登录: