JavaWeb 入门 最简单的学生信息管理系统

最近在学习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
    	
    @Override
    public 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");
        //封装进JavaBean
        Student 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

猜你喜欢

转载自blog.csdn.net/weixin_44215175/article/details/107169938