JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例

Servlet_JSP_JDBC 综合案例

案例描述: 通过Servlet,JSP,JDBC实现简单的 学生成绩管理系统,即可以查看所有学生的成绩,新添加学生的成绩,删除和修改学生的成绩。

注: 本案例注重于实现交互,并没有对页面进行美化

注: 本案例基于B站UP主:楠哥教你学Java 的课程《Java Web从入门到实战【完整版】》进行整理补充,本文章仅用于个人学习交流使用。

目录结构

    • Servlet_JSP_JDBC 综合案例
        • 1.界面展示
        • 2.功能演示
        • 3.源代码

1.界面展示

1.学生信息展示页面

注: 在浏览器地址栏输入 loacalhost:8080/student 访问,如果访问 loacalhost:8080/index.jsp 会只显示视图,没有数据。因为访问 /student 经过了Servlet处理,连接了数据库,而直接访问 /index.jsp 则没有。
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第1张图片
2.学生信息添加页面

注: 需要在浏览器地址栏输入 loacalhost:8080/add.jsp 访问,因为案例做的比较简单,没有实现跳转。信息成功添加之后会自动跳转到学生信息展示页面。
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第2张图片
3.学生信息修改页面

注: 编号是只读的,无法修改,信息成功修改之后会自动跳转到学生信息展示页面。

JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第3张图片

2.功能演示

1.初始数据库
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第4张图片
2.浏览学生信息展示页面
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第5张图片
3.添加学生信息
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第6张图片
添加成功:

编号自动加一,因为之前测试写过一个34的,这次加一后成为35

日期是随便生成的,不用特别在意。
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第7张图片
4.修改学生信息
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第8张图片
修改成功
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第9张图片
5.删除学生信息

删除成功
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第10张图片
6.最后的数据库
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第11张图片

3.源代码

代码目录结构:
JavaWeb学习笔记(14.5)__Servlet_JSP_JDBC 综合案例_第12张图片
1.实体类 Student.java

封装了一个 student 实体对象

package com.lut.entity;

import java.util.Date;

public class Student {
     
    private Integer id;
    private String name;
    private Integer score;
    private Date brithday;

    @Override
    public String toString() {
     
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", score=" + score +
                ", brithday=" + brithday +
                '}';
    }

    public Student(Integer id, String name, Integer score, Date brithday) {
     
        this.id = id;
        this.name = name;
        this.score = score;
        this.brithday = brithday;
    }

    public Integer getId() {
     
        return id;
    }

    public void setId(Integer id) {
     
        this.id = id;
    }

    public String getName() {
     
        return name;
    }

    public void setName(String name) {
     
        this.name = name;
    }

    public Integer getScore() {
     
        return score;
    }

    public void setScore(Integer score) {
     
        this.score = score;
    }

    public Date getBrithday() {
     
        return brithday;
    }

    public void setBrithday(Date brithday) {
     
        this.brithday = brithday;
    }
}

2.数据处理:StudentRespository.java

数据持久层,建立了与数据库的连接,并通过SQL语句修改/查询数据库。主要定义了 查询/添加/删除/修改 的方法。

package com.lut.repository;

import com.lut.entity.Student;
import com.lut.util.JDBCTools;

import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

//数据持久层,查询数据
public class StudentRespository {
     
    //查询的方法
    public List<Student> findALL(){
     
        List<Student> list=new ArrayList<>();
        //定义在外面,里面赋值,为了扩大作用域,能够在finally里面关掉
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        try{
     
            connection= JDBCTools.getConnection();
            String sql="select * from test.student";
            preparedStatement=connection.prepareStatement(sql);
            resultSet=preparedStatement.executeQuery();
            Student student=null;
            while (resultSet.next()){
     
                Integer id=resultSet.getInt(1);
                String name=resultSet.getString(2);
                Integer score=resultSet.getInt(3);
                Date date=resultSet.getDate(4);
                student=new Student(id,name,score,date);
                list.add(student);
            }
        }catch (Exception e){
     
            e.printStackTrace();
        }finally {
     
            JDBCTools.release(connection,preparedStatement,resultSet);
        }

        return list;
    }


    //添加的方法
    public void add(String name,Integer score){
     
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        try{
     
            connection= JDBCTools.getConnection();
            String sql="insert into test.student(name, score, brithday) values (?,?,?)";
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setString(1,name);
            preparedStatement.setInt(2,score);
            preparedStatement.setDate(3,new java.sql.Date(1));
            preparedStatement.executeUpdate();
        }catch (Exception e){
     
            e.printStackTrace();
        }finally {
     
            JDBCTools.release(connection,preparedStatement,null);
        }

    }

    //删除的方法
    public void deleteById(Integer id){
     
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        try {
     
            connection=JDBCTools.getConnection();
            String sql="delete from test.student where id=?";
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setInt(1,id);
            preparedStatement.executeUpdate();
        }catch (Exception e){
     
            e.printStackTrace();
        }finally {
     
            JDBCTools.release(connection,preparedStatement,null);
        }
    }


    //获取Id的方法,通过Id定位
    public Student findById(Integer id){
     
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        ResultSet resultSet=null;
        Student student=null;
        try {
     
            connection=JDBCTools.getConnection();
            String sql="select * from test.student where id=?";
            preparedStatement=connection.prepareStatement(sql);
            preparedStatement.setInt(1,id);
            resultSet=preparedStatement.executeQuery();
            while (resultSet.next()){
     
                Integer id2=resultSet.getInt(1);
                String name=resultSet.getString(2);
                Integer score=resultSet.getInt(3);
                Date date=resultSet.getDate(4);
                student=new Student(id2,name,score,date);
            }
        }catch (SQLException e){
     
            e.printStackTrace();
        }finally {
     
            JDBCTools.release(connection,preparedStatement,resultSet);
        }
        return student;
    }


    //修改的方法
    public void update(Integer id,String name,Integer score){
     
        System.out.println("调用修改的方法");
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        try{
     
            connection= JDBCTools.getConnection();
            String sql="update test.student set name=?,score=? where id=?";
            preparedStatement=connection.prepareStatement(sql);
            System.out.println("执行SQL");
            preparedStatement.setString(1,name);
            preparedStatement.setInt(2,score);
            preparedStatement.setInt(3,id);
            preparedStatement.executeUpdate();
        }catch (Exception e){
     
            e.printStackTrace();
        }finally {
     
            JDBCTools.release(connection,preparedStatement,null);
        }

    }

    //main函数,测试用
    public static void main(String[] args) {
     
        StudentRespository studentRespository=new StudentRespository();
        System.out.println(studentRespository.findALL());
    }
}

3.工具类:JDBCTools.java

将经常用到的代码块进行封装,定义为一个方法,要使用该代码时只需要调用该方法即可。主要有:数据库驱动,与数据连接,释放连接的资源等。

package com.lut.util;

import java.sql.*;

public class JDBCTools {
     
    //工具包

    private static Connection connection;
    private static String url = "jdbc:mysql://localhost:3306/test? useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
    private static String user="root";
    private static String password="123456";

    static {
     
        //静态代码块只执行一次
        try{
     
            Class.forName("com.mysql.cj.jdbc.Driver");
        }catch (Exception e){
     
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
     
        //定义为静态方法,其他类就可以直接通过 类名.方法名 调用,不用再创建对象
        //静态方法里面,所有的成员也必须都是静态的...?
        try{
     
            connection=DriverManager.getConnection(url,user,password);
        }catch (SQLException e){
     
            e.printStackTrace();
        }
        return connection;
    }

    public static void release(Connection connection, Statement statement, ResultSet resultSet){
     
       try{
     
           if (connection!=null){
     
               connection.close();
           }
           if (statement!=null){
     
               statement.close();
           }
           if (resultSet!=null){
     
               resultSet.close();
           }
       }catch (SQLException e){
     
           e.printStackTrace();
       }
    }

}

4.服务类:StudentServlet.java

获取页面的请求,并调用相关的方法对请求进行处理,最后将处理好的信息返回到页面上。

package com.lut.servlet;

import com.lut.entity.Student;
import com.lut.repository.StudentRespository;

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.util.List;

@WebServlet("/student")
public class StudentServlet extends HttpServlet {
     

    StudentRespository studentRespository;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
        req.setCharacterEncoding("utf-8");
        String method=req.getParameter("method");
        System.out.println("获取method"+method);
        studentRespository=new StudentRespository();
        switch (method){
     
            case "add":
                String name=req.getParameter("name");
                String scorestr=req.getParameter("score");
                Integer score=Integer.parseInt(scorestr);
                studentRespository.add(name,score);
                resp.sendRedirect("/student");
                break;
            case "update":
                String idstr=req.getParameter("id");
                Integer id=Integer.parseInt(idstr);
                String name2=req.getParameter("name");
                String scorestr2=req.getParameter("score");
                score=Integer.parseInt(scorestr2);
                studentRespository.update(id,name2,score);
                resp.sendRedirect("/student");
                break;
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     
        String method=req.getParameter("method");
        if (method==null){
     
            method="findAll";
        }
        switch (method){
     
            case "findAll":
                //返回视图+数据
                studentRespository=new StudentRespository();
                List<Student> list=studentRespository.findALL();
                req.setAttribute("list",list);
                req.getRequestDispatcher("index.jsp").forward(req,resp);
                break;
            case "deleteByID":
                String idstr=req.getParameter("id");
                Integer id=Integer.parseInt(idstr);
                studentRespository.deleteById(id);
                resp.sendRedirect("/student");
                break;
            case "findById":
                String idstr2=req.getParameter("id");
                Integer id2=Integer.parseInt(idstr2);
                req.setAttribute("student",studentRespository.findById(id2));
                req.getRequestDispatcher("update.jsp").forward(req,resp);
                break;
        }


    }
}

5.信息展示界面:index.jsp

将 Servlet 处理好的信息展示出来。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>$Title$title>
  head>
  <body>
<h1>学生管理系统h1>
<table>
  <tr>
    <th>编号th>
    <th>姓名th>
    <th>成绩th>
    <th>注册日期th>
  tr>
  <c:forEach items="${list}" var="student">
    <tr>
      <td>${student.id}td>
      <td>${student.name}td>
      <td>${student.score}td>
      <td>${student.brithday}td>
      <td>
        <a href="student?method=deleteByID&id=${student.id}">删除a>
        <a href="student?method=findById&id=${student.id}">修改a>
      td>
    tr>
  c:forEach>
  
table>

  body>
html>

6.添加页面:add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Titletitle>
head>
<body>
    <form action="student" method="post">
        姓名:<input type="text" name="name"><br>
        成绩:<input type="text" name="score"><br>
        <input type="hidden" name="method" value="add">
        
        <input type="submit" value="提交">
    form>
body>
html>

7.更新界面:update.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Titletitle>
head>
<body>
    <form action="student" method="post">
        编号:<input type="text" name="id" readonly value="${student.id}"><br>
        姓名:<input type="text" name="name" value="${student.name}"><br>
        成绩:<input type="text" name="score" value="${student.score}"><br>
        <input type="hidden" name="method" value="update">
        
        <input type="submit" value="修改">
    form>
body>
html>

你可能感兴趣的:(JavaWeb学习笔记,java,jsp,mysql,servlet,数据库)