如何用IDEA写JSP项目学生管理系统:从零开始搭建完整开发流程
在Java Web开发中,JSP(Java Server Pages)作为传统但依然广泛应用的技术栈之一,常被用于构建动态网页应用。对于初学者或在校学生而言,使用IntelliJ IDEA这一强大的集成开发环境来创建一个基于JSP的学生管理系统,不仅能够帮助掌握Web开发的核心技能,还能为后续学习Spring Boot、MyBatis等现代框架打下坚实基础。
一、前期准备:环境配置与工具安装
要成功开发一个JSP学生管理系统,首先需要完成以下准备工作:
- 安装JDK:确保已安装JDK 8或更高版本,并正确设置JAVA_HOME环境变量。
- 下载并安装IntelliJ IDEA:推荐使用社区版(Community Edition),它对Java EE支持良好,且免费开源。
- 配置Tomcat服务器:在IDEA中通过“Add Configuration”添加本地Tomcat服务器,路径指向解压后的Tomcat目录。
- 数据库选择:建议使用MySQL数据库存储学生信息,便于数据持久化和管理。
完成上述步骤后,可以在IDEA中新建一个Maven项目,结构清晰,依赖管理便捷。
二、项目结构设计与Maven依赖配置
合理的项目结构是高效开发的前提。推荐采用如下标准结构:
src/main/java/com/example/studentmanager/
├── controller/
├── dao/
├── model/
├── service/
└── util/
src/main/webapp/
├── WEB-INF/
│ ├── web.xml
│ └── views/
│ ├── login.jsp
│ ├── list.jsp
│ └── add.jsp
└── css/
└── style.css
在pom.xml文件中添加必要的依赖:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
三、数据库设计与连接池实现
创建名为student_db的数据库,并设计一张students表:
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
gender VARCHAR(10),
major VARCHAR(50)
);
为了提升性能和安全性,建议使用Druid连接池替代原始JDBC方式。在src/main/resources/db.properties中配置数据库参数:
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/student_db?useUnicode=true&characterEncoding=utf8 username=root password=your_password
编写DBUtil.java类实现连接获取:
public class DBUtil {
private static DataSource dataSource;
static {
try {
Properties props = new Properties();
props.load(DBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
dataSource = DruidDataSourceFactory.createDataSource(props);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
四、核心功能模块开发
1. Model层 —— Student类定义
public class Student {
private int id;
private String name;
private int age;
private String gender;
private String major;
// getter/setter方法...
}
2. DAO层 —— 数据访问对象
public class StudentDAO {
public List getAllStudents() throws SQLException {
String sql = "SELECT * FROM students";
try (Connection conn = DBUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery()) {
List students = new ArrayList<>();
while (rs.next()) {
students.add(new Student(
rs.getInt("id"),
rs.getString("name"),
rs.getInt("age"),
rs.getString("gender"),
rs.getString("major")
));
}
return students;
}
}
public void addStudent(Student student) throws SQLException {
String sql = "INSERT INTO students(name, age, gender, major) VALUES (?, ?, ?, ?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, student.getName());
stmt.setInt(2, student.getAge());
stmt.setString(3, student.getGender());
stmt.setString(4, student.getMajor());
stmt.executeUpdate();
}
}
}
3. Service层 —— 业务逻辑封装
public class StudentService {
private StudentDAO dao = new StudentDAO();
public List getAllStudents() {
try {
return dao.getAllStudents();
} catch (SQLException e) {
throw new RuntimeException("查询失败", e);
}
}
public void addStudent(Student student) {
try {
dao.addStudent(student);
} catch (SQLException e) {
throw new RuntimeException("添加失败", e);
}
}
}
4. Controller层 —— Servlet处理请求
@WebServlet("/students")
public class StudentServlet extends HttpServlet {
private StudentService service = new StudentService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List students = service.getAllStudents();
req.setAttribute("students", students);
req.getRequestDispatcher("/WEB-INF/views/list.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String name = req.getParameter("name");
int age = Integer.parseInt(req.getParameter("age"));
String gender = req.getParameter("gender");
String major = req.getParameter("major");
Student student = new Student(0, name, age, gender, major);
service.addStudent(student);
resp.sendRedirect("/students");
}
}
五、前端页面开发(JSP + HTML + CSS)
在/WEB-INF/views/list.jsp中展示所有学生信息:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="com.example.studentmanager.model.Student" %>
<!DOCTYPE html>
<html>
<head>
<title>学生列表</title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<h2>学生管理系统</h2>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>专业</th>
</tr>
</thead>
<tbody>
<% for (Student s : (List<Student>) request.getAttribute("students")) {%>
<tr>
<td><%= s.getId() %></td>
<td><%= s.getName() %></td>
<td><%= s.getAge() %></td>
<td><%= s.getGender() %></td>
<td><%= s.getMajor() %></td>
</tr>
<% } %>
</tbody>
</table>
<a href="/add.jsp">新增学生</a>
</body>
</html>
同样,在/add.jsp中提供表单供用户输入新学生信息:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<title>添加学生</title>
</head>
<body>
<h2>添加学生信息</h2>
<form action="/students" method="post">
姓名:<input type="text" name="name" required><br>
年龄:<input type="number" name="age" required><br>
性别:<input type="text" name="gender" required><br>
专业:<input type="text" name="major" required><br>
<button type="submit">提交</button>
</form>
</body>
</html>
六、部署与测试运行
在IDEA中点击绿色运行按钮(Run),选择配置好的Tomcat服务器即可启动项目。默认地址为http://localhost:8080/student-manager/students。
首次访问时,系统会自动加载数据库中的学生数据;点击“新增学生”跳转到添加页面,填写信息后提交即可插入到数据库中。
七、常见问题与优化建议
- 编码问题:确保JSP页面和数据库字符集统一为UTF-8,避免乱码。
- 异常处理:在DAO和服务层增加try-catch块,捕获SQLException并记录日志。
- 前端增强:可引入Bootstrap美化界面,提升用户体验。
- 分页功能:当数据量增大时,考虑实现分页查询以提高性能。
- 权限控制:后期可加入登录认证机制,限制非授权访问。
通过以上步骤,你已经成功使用IntelliJ IDEA搭建了一个完整的JSP学生管理系统,涵盖了前后端分离思想、数据库操作、MVC架构模式以及基本的Web安全实践。

