小明:嘿,李老师,我最近在研究一个学生管理信息系统,想看看能不能结合吉林地区的实际情况来设计。
李老师:听起来不错。你打算用什么技术来实现呢?
小明:我想用Java,因为它是跨平台的,而且有丰富的库支持。另外,我也考虑到了数据库的问题,可能用MySQL。
李老师:很好,Java确实是个不错的选择。那你可以先从系统的基本结构开始设计。
小明:对,我打算先设计一个用户登录模块。这样可以确保系统的安全性。
李老师:没错,登录功能是系统的基础。你可以用Servlet来处理请求,JSP来做页面展示。
小明:那我可以写一个简单的登录页面,然后用Servlet来验证用户名和密码。
李老师:对的,不过要注意防止SQL注入攻击,建议使用PreparedStatement。
小明:明白了,那我先写个例子试试看。
李老师:好的,那我们来看看代码。
小明:这是我的登录页面login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生管理系统登录</title>
</head>
<body>
<h2>学生管理系统登录</h2>
<form action="LoginServlet" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
李老师:这个页面看起来没问题。接下来是Servlet部分。
小明:这是我写的LoginServlet.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student_db", "root", "123456");
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
HttpSession session = request.getSession();
session.setAttribute("user", username);
response.sendRedirect("dashboard.jsp");
} else {
response.sendRedirect("login.jsp?error=1");
}
rs.close();
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
李老师:这段代码写得不错,但需要注意异常处理和资源关闭的问题。
小明:是的,我会加上try-with-resources来优化资源管理。
李老师:非常好。接下来,我们可以考虑数据库的设计。

小明:我打算创建一个users表,存储用户的用户名、密码等信息。
李老师:没错,那我们可以写一个建表语句。
小明:这是我的SQL语句:
CREATE DATABASE student_db;
USE student_db;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL
);
李老师:这个设计很合理,但也可以考虑添加角色字段,方便权限管理。
小明:嗯,我可以添加一个role字段,比如管理员、教师、学生等。
李老师:对,这样系统会更灵活。接下来,我们可以设计一个学生信息管理模块。
小明:是的,我计划让学生可以查看、添加、修改和删除自己的信息。
李老师:那你可以设计一个Student类,包含学号、姓名、性别、年龄等属性。
小明:这是我的Student.java:
public class Student {
private int id;
private String studentId;
private String name;
private String gender;
private int age;
// 构造函数、getter和setter方法
public Student() {}
public Student(String studentId, String name, String gender, int age) {
this.studentId = studentId;
this.name = name;
this.gender = gender;
this.age = age;
}
// getter和setter
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getStudentId() { return studentId; }
public void setStudentId(String studentId) { this.studentId = studentId; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getGender() { return gender; }
public void setGender(String gender) { this.gender = gender; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
}
李老师:这个类设计得很清晰。接下来是数据库操作部分。
小明:我打算用JDBC来连接数据库,并实现CRUD操作。
李老师:那我们可以写一个StudentDAO类。

小明:这是我的StudentDAO.java:
import java.sql.*;
import java.util.*;
public class StudentDAO {
private Connection connection;
public StudentDAO() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/student_db", "root", "123456");
} catch (Exception e) {
e.printStackTrace();
}
}
public List getAllStudents() {
List students = new ArrayList<>();
try {
String sql = "SELECT * FROM students";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
Student student = new Student(
rs.getString("student_id"),
rs.getString("name"),
rs.getString("gender"),
rs.getInt("age")
);
student.setId(rs.getInt("id"));
students.add(student);
}
rs.close();
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
return students;
}
public void addStudent(Student student) {
try {
String sql = "INSERT INTO students (student_id, name, gender, age) VALUES (?, ?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1, student.getStudentId());
ps.setString(2, student.getName());
ps.setString(3, student.getGender());
ps.setInt(4, student.getAge());
ps.executeUpdate();
ps.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 修改和删除方法类似,这里省略
}
李老师:这段代码写得很好,但要注意事务管理和资源释放。
小明:明白了,我会加上try-with-resources来优化。
李老师:好的,现在我们可以设计一个学生信息管理页面。
小明:我打算用JSP来显示学生列表,并提供添加、编辑和删除功能。
李老师:那你可以在JSP中调用StudentDAO来获取数据。
小明:这是我的students.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<%@ page import="com.example.Student" %>
<%@ page import="com.example.StudentDAO" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息管理</title>
</head>
<body>
<h2>学生信息管理</h2>
<%
StudentDAO dao = new StudentDAO();
List students = dao.getAllStudents();
%>
<table border="1">
<tr>
<th>学号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>操作</th>
</tr>
<% for (Student student : students) { %>
<tr>
<td><%= student.getStudentId() %></td>
<td><%= student.getName() %></td>
<td><%= student.getGender() %></td>
<td><%= student.getAge() %></td>
<td><a href="edit.jsp?id=<%= student.getId() %>">编辑</a> |
<a href="delete.jsp?id=<%= student.getId() %>">删除</a></td>
</tr>
<% } %>
</table>
<a href="add.jsp">添加学生</a>
</body>
</html>
李老师:这个页面做得很好,但要注意安全问题,比如防止XSS攻击。
小明:是的,我会在输出时进行转义处理。
李老师:看来你已经掌握了基本的开发流程。接下来,你可以考虑系统的扩展性。
小明:比如加入分页功能,或者引入Spring框架来简化开发。
李老师:对,Spring框架可以提高代码的可维护性和可测试性。
小明:那我可以尝试用Spring Boot来重构项目。
李老师:很好,这是一个很好的学习方向。总之,你的系统已经具备了良好的基础,下一步就是完善细节。
小明:谢谢李老师的指导,我会继续努力的!
本站部分内容及素材来源于互联网,由AI智能生成,如有侵权或言论不当,联系必删!