最近在学习JavaWeb,整理一下。写了个很简单的学生信息管理系统。系统只包括简单的对学生信息进行增删改查。系统采用三层设计模式。
先展示一下系统的业务处理逻辑图

逻辑如图所示,获取前端用户交互信息,逐步调用其他层,实现“增删改查”业务。
数据库设计(DDL信息):

CREATE TABLE `stu` (`sno` varchar(11) NOT NULL,`sname` varchar(20) DEFAULT NULL,`sage` tinyint(4) DEFAULT NULL,`saddress` varchar(30) DEFAULT NULL,PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

项目主要几个Jsp页面如下:
1.首页,展示学生信息

2.点击学号超链接,进入学生详细信息页面

3.新增学生页面

页面都比较简单,只是几个输入框而已。。
接下来看一下项目文件结构:

这里对项目目录结构进行简单说明;

  • dao:存放数据访问层的Java文件
  • entity:存放实体类,对应数据库的表
  • service:存放业务逻辑层的Java文件
  • servlet:存放Servlet文件(本质上是一个Java文件),一个功能对应一个Servlet
  • web目录放着JS、CSS(本项目没有)、jsp文件

项目开始时要先导入数据库jar包,教程可以参考一下网上资源,这里不作介绍

接下来开始展示每个页面的代码(为了篇幅不过长,省略部分代码),都比较简单,这里从底层往上介绍:
1.Student.java

package pers.student.entity;public class Student {private String sno;private String sname;private int age;private String address;public Student(){}...此处省略其他构造方法和Setter、Getter@Overridepublic String toString() {return this.getSno() + " - " + this.getSname() + " - " + this.getAge() + " - " + this.getAddress();}
}

2.StudentDao.java

package pers.student.dao;import pers.student.entity.Student;import java.sql.*;
import java.util.ArrayList;
import java.util.List;//数据访问层,原子性的增删改查
public class StudentDao {//数据库连接数据private final String DRIVER = "com.mysql.cj.jdbc.Driver";private final String DB = "javadb";private final String USER = "java";private final String PWD = "123456";private final String URL = "jdbc:mysql://localhost:3306/"+DB+"?useUnicode = true&" +"characterEncoding = utf-8&useSSL = false&serverTimezone = GMT&allowPublicKeyRetrieval=true";/*** 根据学号查询此人是否存在* @param sno* @return*/public boolean isExit(String sno) {return queryStudentBySno(sno) != null;}/*** 根据学号查询学生* @param sno* @return 返回一个学生对象*/public Student queryStudentBySno(String sno) {Student student = null;Connection connection = null;PreparedStatement pstmt = null;ResultSet rs = null;try {Class.forName(DRIVER);connection = DriverManager.getConnection(URL, USER, PWD);String sql = "select * from stu where sno = ?";pstmt = connection.prepareStatement(sql);pstmt.setString(1, sno);rs = pstmt.executeQuery();if (rs.next()) {String no = rs.getString("sno");String name = rs.getString("sname");int age = rs.getInt("sage");String address = rs.getString("saddress");student = new Student(no, name, age, address);}return student;} catch (ClassNotFoundException e) {e.printStackTrace();return null;} catch (SQLException e) {e.printStackTrace();return null;} catch (Exception e) {e.printStackTrace();return null;} finally {try {if (rs != null) rs.close();if (pstmt != null) pstmt.close();if (connection != null) connection.close();} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}}...此处省略其他方法
}

3.StudentService.java

package pers.student.service;
import pers.student.dao.StudentDao;
import pers.student.entity.Student;
import java.util.List;//业务逻辑层:逻辑性的增删改查( 增:先查后增 ),对dao层进行组装
public class StudentService {StudentDao studentDao = new StudentDao();/*** 增加学生* @param student* @return*/public boolean addStudent(Student student) {if (!studentDao.isExit(student.getSno())) {//不存在return studentDao.addStudent(student);} else {//System.out.println("此人已存在!");return false;}}...此处省略其他方法
}

4.AddStudentServlet.java(Servlet只展示这一个)

package pers.student.servlet;import pers.student.entity.Student;
import pers.student.service.StudentService;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet(value = "/AddStudentServlet")
public class AddStudentServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置编码request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");//获取前台数据String no = request.getParameter("sno");String name = request.getParameter("sname");String sage = request.getParameter("sage");int age = 0;if (!(sage == null || sage.equals(""))) {age = Integer.parseInt(sage);}String address = request.getParameter("saddress");//封装进JavaBeanStudent student = new Student(no, name, age, address);StudentService studentService = new StudentService();boolean flag = studentService.addStudent(student);PrintWriter out = response.getWriter();if (!flag) {request.setAttribute("error","addError");} else {request.setAttribute("error","addSuccess");}
//        response.sendRedirect("QueryAllStudentServlet");request.getRequestDispatcher("QueryAllStudentServlet").forward(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}

5.index.jsp(jsp只展示这一个)

<%@ page import="java.util.List" %>
<%@ page import="pers.student.entity.Student" %><%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>学生信息列表</title><script type="text/javascript" src="js/jquery-1.8.3.min.js"></script><script type="text/javascript">$(function () {$("tr:odd").css("background-color","lightgray");});</script></head><body><%String error = (String) request.getAttribute("error");if (error != null){if (error.equals("addError")) {out.print("增加失败");} else if (error.equals("addSuccess")){out.print("增加成功");}}%><table border="1px"><tr><th>学号</th><th>姓名</th><th>年龄</th><th>操作</th></tr><%//获取request域中的数据List<Student> students = (List<Student>) request.getAttribute("students");for (Student student: students) {%><tr><td><a href="QueryStudentServlet?sno=<%=student.getSno()%>"><%=student.getSno()%></a></td><td><%=student.getSname()%></td><td><%=student.getAge()%></td>
<%--          <td><%=student.getAddress()%></td>--%><td><a href="#" onclick="window.confirm('确认删除吗?')?this.href='DeleteStudentServlet?sno=<%=student.getSno()%>':this.href='javascript:void()';">删除</a></td></tr><%}%></table><a href="add.jsp">新增学生</a></body>
</html>

项目的代码基本上都展示出来了。最后要在web.xml中配置一下项目根目录默认启动页面,默认启动QueryAllStudentServlet:

<welcome-file-list><welcome-file>QueryAllStudentServlet</welcome-file><welcome-file>index.jsp</welcome-file>
</welcome-file-list>

进行以上操作,就可以搭建出一个具有增删改查的简单的JavaWeb项目了。

该项目缺点

  1. 界面比较简陋(丑)
  2. 内容很少,只涉及基本增删改查
  3. 连接数据库方面冗余代码较多,没有单独分出来

不过对于新手来说比较友好,涉及的内容不多,可以作为入门小小小项目。项目逻辑简单且明了。

如果需要源码的话,可以从CSDN下载,只需要3个C币,如果有C币的话,还请支持一下,地址为:
下载地址https://download.csdn.net/download/weixin_44215175/12582906
如果没有C币的话,也可以从GitHub上获取,GitHub源码地址:
源码地址https://github.com/Fjz-Kuroko/ThreeTierSample

JavaWeb 入门 最简单的学生信息管理系统相关推荐

  1. JavaWeb之简单的学生信息管理系统(二)

    JavaWeb之简单的学生信息管理系统(一) JavaWeb之简单的学生信息管理系统(二) JavaWeb之简单的学生信息管理系统(三) 今日任务:实现学生管理系统的查找和添加功能! 一. 查询学生信 ...

  2. 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...

    一个简单的学生信息管理系统基于python和tkinter 1.需求分析1.大学生信息管理系统使用tkinter接口创建一个窗口.使界面更漂亮.2. 实现与数据库的连接,教师和学生的信息可以保存或读取 ...

  3. python成绩管理系统设计 gui csdn_用golang简单编写学生信息管理系统

    用golang简单编写学生信息管理系统 发布时间:2020-09-04 11:45:16编辑:三青(参考七米老师的视频)查看次数:187 student.gopackage main import & ...

  4. c++ stl list实现简单的学生信息管理系统

    c++ stl list实现简单的学生信息管理系统 问题描述: 已知有20个学生记录(包括学号.姓名.成绩)的文件student.dat.要求编程序实现查询.排序.插入.删除诸功能. 系统的基本功能: ...

  5. Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。

    我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...

  6. java实现简单的学生信息管理系统

    java实现简单的学生信息管理系统(无界面) 学生类实体: package com.edu.imau.wcy;public class Stu {private String stuNum;//学号p ...

  7. php编写一个学生类_PHP实现简单的学生信息管理系统(web版)

    (∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...

  8. php学籍信息管理系统心得_PHP实现简单的学生信息管理系统(web版)

    (∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...

  9. 学生信息系统求助_Student Information Management -一个简单的学生信息管理系统(持续更新2)...

    这次更新的内容 1:优化了增加学生信息的函数 2:   增加了删除学生信息的功能 系统图 图片发自简书App 第一次见到的库和函数 #include "memory.h" void ...

最新文章

  1. 大型程序是如何开发的_大型小程序如何研发提效
  2. 10 进制转 2 进制、16 进制
  3. oracle 11g初始段大小,Oracle 11g配置调优,一般需要注意哪些方面呢?
  4. 第 69 章 数据库链接
  5. 云和恩墨技术通讯:Oracle AMM自动内存管理引起数据库阻塞
  6. 互联网短平快下,DevCloud如何支撑软件开发的“转型”?
  7. PyTorch 1.0 中文文档:Windows FAQ
  8. 火山PC模拟键盘操作
  9. 前后端分离的跨域请求问题解决
  10. ROS下usb_cam的安装
  11. msg邮件转eml邮件
  12. 电脑上怎么截图按什么键?电脑截图的快捷键是什么?
  13. 围成面积(信息学奥赛一本通 - T1359)
  14. 使用JS取得焦点(focus)元素
  15. php 共享缓存之yac 快来替换掉APCU memcache
  16. 华为测试 称砝码
  17. BootStrap一页通(样式+组件+插件)
  18. CRUD的意思???
  19. 嵌入式linux图片浏览器,基于嵌入式Linux图片浏览器的设计与实现.doc
  20. SDNU-多校训练赛2-[ABF]

热门文章

  1. 4399曾经最火的黄金矿工小游戏,用Java语言2小时学会
  2. 因为我没交周报,leader要罚款200元,怎么给他挖坑?能以敲诈勒索罪告他吗?...
  3. 计算机音乐谱大全桥边姑娘,桥边姑娘-总谱完整版
  4. 雷军说的:站在风口上,猪都能飞起来,这就是借势。程序员该如何借势改变35岁危机?
  5. Java等概率生成1到n之间的随机数
  6. 2022HNCTF---Week4 crypto wp
  7. 已解决微软Office2016 Excel卡顿\缓慢、打开第二个文件加载很慢问题(亲测有效)
  8. 中望CAD2015版网络版激活端口号
  9. 宁夏省银川市谷歌高清卫星地图下载(百度网盘离线包下载)
  10. magento 多货币paypal支付扩展