初学Java Web(9)——学生管理系统(简易版)总结
项目开始时间:2018年4月8日14:37:47
项目完成时间:2018年4月9日10:03:30
技术准备
这个项目是自己用于巩固 J2EE 相关知识的练手项目,非常简单,但是相关的功能却非常实用,所以在这里分享一下
为了完成这个项目,需要掌握如下技术:
- Java
基础知识 - 前端:
HTML, CSS, JAVASCRIPT, JQUERY - J2EE:
Tomcat, Servlet, JSP, Filter - 数据库:
MySQL
开发流程
项目虽然很简单,很小,但是为了开发的有条不紊,还是按照商业项目的开发来完成。
① 需求分析
首先要确定要做哪些功能
- 使用数据库来保存数据
- 能增删改查学生的信息(学号,名称,年龄,性别,出生日期)
② 表结构设计
根据需求,那么只需要一个 student 表就能够完成功能了。
- 创建数据库:student
将数据库编码格式设置为 UTF-8 ,便于存取中文数据
- 创建学生表:student
不用学生学号(studentID)作为主键的原因是:不方便操作,例如在更新数据的时候,同时也要更改学号,那这样的操作怎么办呢?
所以我们加了一个 id 用来唯一表示当前数据。
③ 原型设计
就是设计界面,在商业项目中,这是很重要的一步,我们可以解除界面原型,低成本、高效率的与客户达成需求的一致性。
这个项目一共就分为两个页面:
主页面:

④ 实体类的设计
实体类仅仅是对数据库中表的一一映射,同时可能还需要兼顾对业务能力的支持。
- 在 Packge[bean]下创建 Student 类:
⑤ DAO 类的设计
DAO,即 Date Access Object,数据库访问对象,就是对数据库相关操作的封装,让其他地方看不到 JDBC 的代码。
首先我们先创建一个数据库操作的工具类:
- 在 Packge[util]下创建 DBUtil 类:
- 写工具类的好处:
便于统一维护,降低维护成本
然后是 DAO 类,除了进行典型的 ORM 支持功能之外,也需要提供各种业务方法。
- 在 Packge[dao]下创建 StudentDAO 类:
- 该类中,既提供了增删改查这些基本的 CRUD 操作
1.增加:public void add(Student student)
2.删除:public void delete(int id)
3.修改:public void update(Student student)
4.查询所有:public List<Student> list()
- 又提供了一些非 CRUD 方法
1.获取总数:public int getTotal()
2.根据 id 获取:public Student get(int id)
⑥ 业务类介绍
作为 J2EE Web 应用,一般都会按照如图所示的设计流程进行:
Servlet -> Service(业务类) -> DAO -> database

单本项目没有使用 Service 这一层,原因是在对 DAO 类进行开发中,已经提供了很好的支持业务的方法,没有必要再包括上一层 Service 业务类。
参考链接:这里
⑦ 功能开发
需要按照模块之间的依赖关系,顺序开发。
- 首先为项目添加必要的 jar 包:
jstl.jar
mysql-connector-java-5.0.8-bin.jar
servlet-api.jar
standard.jar
这也是 Web 开发中最基本的 4 个包
——【1.编写 Filter】——
由于项目中设计表单 POST 方式的提交,所以我们先来编写好相关编码的过滤器,好支持中文的存取
- 在 Packge[filter] 下编写 EncodingFilter 类:
——【2. 编写 Servlet 】——
按照传统的方式,我们项目的业务为增删改查,所以对应四个路径,也就是需要编写四个 Servlet 才可以
- AddServlet:
- DeleteServlet:
- EditServlet:
- ListServlet:
- UpdateServlet:
——【3. JSP 的编写】——
我们把默认的 index.jsp 修改成如下代码:
- 引入 JQ 和 Bootstrap
为了简化操作,引入了 JQuery 和 Bootstrap - 编写 listStudent.jsp
其实主要还是利用 Bootstrap 编写好整个页面,我写的时候也是对照这里写的
- eidtStudent.jsp
编辑表单对照着首页的增加表单稍微改一改参数就好了
- style.css 文件:
——【4. 项目细节】——
项目的整理结构:
分页功能
- 首页在 Packge[util] 下创建一个 Page 工具类:
- totalPage 是计算得来的数,用来表示页码一共的数量
在首页显示的 StudentList 用 page 的参数来获取:
并且在 DAO 类中用 LIMIT 关键字:
-
第一个参数为 start,第二个参数为 count
这样就能根据分页的信息来获取到响应的数据 -
编写分页栏:
1.写好头和尾
2.写好«
‹
这两个功能按钮
使用 <c:if>
标签来增加边界判断,如果没有前面的页码了则设置为disable状态
再通过 JavaScrip 代码来完成禁用功能:
3.完成中间页码的编写
从 0
循环到 page.totalPage - 1
,varStatus
相当于是循环变量
-10 <= 当前页*每一页显示的数目 - 当前页开始的数据编号 <= 30

4.在 Servlet 中获取参数
Date 转换的问题
项目总结
这一个项目实在有些太简单了,可能最需要理解的一个功能就属于【分页功能】了吧
不过还是借助这个项目,进一步巩固了 J2EE 开发的相关知识,也对开发的流程愈发熟悉,整个项目编写时间不超过 8 个小时,对于我自己来说,不算快,但还算比较顺畅的
需要改进的地方:
-
登录验证
本项目没有增加登录验证,可以增加一个登录页面并结合 session 来完成验证 -
代码重构
本项目仅仅完成的是一个学生表的增删改查,却有以下的五个 Servlet :

如果项目大起来,那可想而知,Servlet 有多臃肿,维护成本有多高
- 改进方法:用一个 StudentServlet 代替
- 具体做法:使用 Filter + Servlet 完成
① 首先编写一个过滤所有地址的 Filter,并解析地址栏的地址,提取出其中的方法传递给 StudentServlet (这个时候需要统一的地址,如:
student_list
、student_edit
、student_delete
、student_update
)
② 在 Servlet 中获取 method 方法,并调用
- 没有对输入的数据的正确性进行验证
这显然会导致许多问题,可以通过 js 代码来完成验证
欢迎转载,转载请注明出处!
简书ID:@我没有三颗心脏
github:wmyskxz
欢迎关注公众微信号:wmyskxz_javaweb
分享自己的Java Web学习之路以及各种Java学习资料
__EOF__

本文链接:https://www.cnblogs.com/wmyskxz/p/8817697.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构