学生管理系统

一、分析具体功能

概述图

具体分析

  第一步:我们可以通过分析得到,我们需要建立数据库stus(用户表t_user和学生表t_stu),通过Navicat配合mysql5.0建立表。

  • 此为学生表

  • 此为用户表

  第二步:我们需要建立两个jsp文件:一个需要写注册的login.jsp页面,另外一个是通过判断之后弹出得到的学生信息stu_list.jsp页面。
而对于登录的界面需要去写三个input标签分别是账号密码和提交。然后学生信息界面我们这次做的是展示所有信息,其中就需要有一个form表单,然后表单里面对于展示所有信息就需要使用EL表达式配合JSTL的内置标签c:forEach去遍历结果,但是需要先导包。

  第三步:我们需要去做一个前两步之间的login_servlet类,通过servlet需要获取信息(通过request.getParameter()方法),查询数据库(利用之前学过的jdbc用过的javaee结构),之后判断信息是否与数据库匹配(利用方法去查),最后给出判断(跳转还是给出提示)。
  
  第四步:我们去完成jdbc关于查询数据库的操作。需要对于用户建立UserDao(写数据库操作的方法)/UserDaoImpl(通过获取后面这个类的属性,然后达到查询的功能)/JDBCUtil类(套之前写过的模板主要去创建属性配置对象,利用类加载器获取外部文件jdbc.properties,然后加载读取的信息)

  第五步:去完成关于学生的操作,需要stuDao(和用户一样去写操作的代码)/Student(写每个学生信息项的get和set方法)/StuDaoImpl(和用户类一样,主要是查询)


二、具体代码:

StuDao类

1
2
3
4
5
6
7
package dao;
import java.util.List;
import domain.Student;
public interface StuDao {
//查询出来所有的学习信息
List<Student> findAll();
}

UserDao类

1
2
3
4
5
package dao;
//该Dao定义了对于用户表访问的规则
public interface UserDao {
boolean login(String username,String password);
}

Student类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package domain;
public class Student {
//到底有多少成员,想要在页面上显示多少
private int id;
private String name;
private int age;
private String gender;
private String address;

//鼠标右键-源码-生成get和set方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}

StuDaoImpl类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import dao.StuDao;
import domain.Student;
import util.JDBCUtil;
public class StuDaoImpl implements StuDao {
@Override
public List<Student> findAll() {
List<Student> list=new ArrayList();
Connection conn = null;
PreparedStatement ps =null;
ResultSet rs=null;
try {
//1.得到连接对象
conn = JDBCUtil.getConn();

String sql="select * from t_stu";

ps = conn.prepareStatement(sql);

rs = ps.executeQuery();

//数据多了用对象装,对象多了用集合装
while(rs.next()) { //循环

Student stu=new Student(); //创建学生
//调用Student类里面的set get方法
stu.setId(rs.getInt("id"));
stu.setAge(rs.getInt("age"));
stu.setName(rs.getString("name"));
stu.setGender(rs.getString("gender"));
stu.setAddress(rs.getString("address"));

list.add(stu);
}

} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
JDBCUtil.release(conn,ps,rs);
}
return list; //需要返回装学生信息的集合
}
}

UserDaoImpl类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import dao.UserDao;
import util.JDBCUtil;
public class UserDaoImpl implements UserDao {
@Override
public boolean login(String username,String password)
//用finally所以将三个都提出来
Connection conn = null;
PreparedStatement ps =null;
ResultSet rs=null;
try {
//1.得到连接对象
conn = JDBCUtil.getConn();

//预先对sql语句执行语法的校验, ? 对应的内容,后面不管传递什么进来,都把它看成是字符串。 or select
String sql="select * from t_user where username=? and password=?";

//2.创建ps对象
ps = conn.prepareStatement(sql);
//? 对应的索引从 1 开始。
ps.setString(1, username);
ps.setString(2, password);

//3.开始执行
rs = ps.executeQuery(); //调用查询语句

//如果能成功移到下一条记录,那么表明有这个用户
return rs.next();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally{
JDBCUtil.release(conn,ps,rs);
}
return false;
}
}

loginServlet类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package Servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.StuDao;
import dao.UserDao;
import domain.Student;
import impl.StuDaoImpl;
import impl.UserDaoImpl;
/**
*用于处理登录的servlet
*/
public class loginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//提交的数据可能有中文: 1.在tomcat里面永久改 2.request方式
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");

//1.获取客户端login里面的账号和密码
String username = request.getParameter("username");
String password = request.getParameter("password");

//左父右子(面向接口)创建对象

//2.去数据库访问有没有这个用户
UserDao dao=new UserDaoImpl();
boolean isSuccess = dao.login(username, password);

//3.针对Dao的结果做出响应
if(isSuccess)
{
//1.查询出来所有的学生信息
StuDao stuDao=new StuDaoImpl();
List<Student> list = stuDao.findAll();

//2.先把这个集合存到作用域
request.getSession().setAttribute("list", list);


//2.response的重定向 --跳转到学生的jsp
response.sendRedirect("stu_list.jsp");

}
else
{
response.getWriter().write("登录失败!请重新输入用户名和密码!");
}

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

}

JDBCUtil类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package util;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtil {
static String driverClass = null;
static String url = null;
static String name = null;
static String password= null;
static{
try {
//1. 创建一个属性配置对象
Properties properties = new Properties();
// InputStream is = new FileInputStream("jdbc.properties");


//使用类加载器,去读取src底下的资源文件。 后面在servlet
InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
//导入输入流。
properties.load(is);

//读取属性
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
name = properties.getProperty("name");
password = properties.getProperty("password");

} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 获取连接对象
*/
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(driverClass);
//静态代码块 ---> 类加载了,就执行。 java.sql.DriverManager.registerDriver(new Driver());
//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//DriverManager.getConnection("jdbc:mysql://localhost/test?user=monty&password=greatsqldb");
//2. 建立连接 参数一: 协议 + 访问的数据库 , 参数二: 用户名 , 参数三: 密码。
conn = DriverManager.getConnection(url, name, password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}

/**
* 释放资源
* @param conn
* @param st
* @param rs
*/
public static void release(Connection conn , Statement st , ResultSet rs){
closeRs(rs);
closeSt(st);
closeConn(conn);
}
public static void release(Connection conn , Statement st){
closeSt(st);
closeConn(conn);
}


private static void closeRs(ResultSet rs){
try {
if(rs != null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}

private static void closeSt(Statement st){
try {
if(st != null){
st.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
}

private static void closeConn(Connection conn){
try {
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}

需要导入的外部文件jdbc.properties

1
2
3
4
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/stus
name=root
password=njdxrjgc7777777.

stu_list.jsp文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<!-- 导入jsp的JSTL包 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!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>学生信息管理系统</title>
</head>
<body>
<br>学生列表:</br>
<table bordent="1" width="700px">

<tr align="center">
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>住址</td>
<td>操作</td>
</tr>

<!-- JSTL里面的标签-->
<c:forEach var="stu" items="${list}">
<tr align="center">
<td>${stu.id}</td>
<td>${stu.name}</td>
<td>${stu.age}</td>
<td>${stu.gender}</td>
<td>${stu.address}</td>
<td><a href="#">更新</a> <a href="#">删除</a></td>
</tr>
</c:forEach>

</table>

</body>
</html>

login.jsp文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ 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>Insert title here</title>
</head>
<body>
<h2>欢迎使用黑马学生管理系统</h2>
<form action="loginServlet" method="post">
账号:<input type="text" name="username"></br>
密码:<input type="text" name="password"></br>
<input type="submit" value="登录">
</form>
</body>
</html>

登录界面:

成功后弹出界面:

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 一、分析具体功能
    1. 1.1. 概述图
    2. 1.2. 具体分析
  2. 2. 二、具体代码:
    1. 2.1. StuDao类
    2. 2.2. UserDao类
    3. 2.3. Student类
    4. 2.4. StuDaoImpl类
    5. 2.5. UserDaoImpl类
    6. 2.6. loginServlet类
    7. 2.7. JDBCUtil类
    8. 2.8. 需要导入的外部文件jdbc.properties
    9. 2.9. stu_list.jsp文件
    10. 2.10. login.jsp文件
,