使用「純」Servlet做一個單表的CRUD操作

2023-04-11 09:00:20

使用「純」Servlet做一個單表的CRUD操作

每博一文案

莊子說:"獨往獨來,是謂獨有。獨有之人,是謂至貴"。熱鬧是別人的狂歡,而孤獨是自己的自由。
相聚總是短暫,唯孤獨綿長,學會孤獨為伍,才能找到浮世清歡。
金庸曾筆下人物說:"天上的白雲聚了又聚,散了又散,人生離合,亦復如斯。" 人生一世,所有的人來人往,
聚散離合,都是緣分使然。緣來便聚,緣盡則散,聚是一團火,散是滿天星。往後餘生,與孤獨和解,做自己的知音。

都說幸福的樣子千篇一律,不幸的人卻各有各的不幸。很多人都只能看到別人所擁有的,卻沒看到人所失去的。
沒有人的生活是真正的容易。當你站在橋上看風景的時候,可能自己亦是別人眼中的風景。
所以不必羨慕別人,珍惜現在所擁有的,過好自己的人生才最重要。
                 
                                 ——————   《一禪心靈廟語》

@

1. 專案說明

介紹: 這裡我們使用 純粹Servlet 完成單表【對部門的】的增刪改查操作。(B/S結構的。)

結構圖

初始的歡迎頁面

部門列表頁面

部門詳情

修改部門

刪除部門:

新增部門:

2. 具體對應的功能的程式碼實現

2.1 準備工作:

  1. 首先我們使用資料庫,儲存資料,這裡我們使用的資料庫是 MYSQL
  2. 我們需要準備一個名為 dept的資料表,並插入一些資料。
create table dept (
  depton int primary key,
  dname varchar(255),
  loc varchar(255)
);

insert into dept(depton,dname,loc) values(10,'xiaoShouBu','BEIJING');
insert into dept(depton,dname,loc) values(20,'YanFaBu','SHANGHAI');
insert into dept(depton,dname,loc) values(30,'JisShuBu','GUANGZHOU');
insert into dept(depton,dname,loc) values(40,'MeiTiBu','SHENZHEN');
select * from dept;

小技巧: MySQL 在 cmd 命令中,批次執行 sql語句的方法:如下,首先將編寫好的 .sql 檔案儲存起來。如下圖所示,

再開啟cmd 進入命令視窗,再進入到Mysql當中,輸入如下命令:

source 後接檔案路徑(要執行的批次的.sql檔案)

當前資料表 dept 的資訊內容如下:

  1. 為該模組匯入 MYSQL的 JDBC 的 jar 包。

注意: 因為我們是在 Tomcat 伺服器當中部署專案的,所以我們需要在 WEB-INF 的目錄下,建立一個名為 lib 的目錄資料夾,用來存放相關的 依賴jar 包,注意路徑位置不可以修改,目錄檔案必須為 lib 不然,當你啟動的Tocmat 伺服器的時候,是無法找到該對應的 依賴jar 包的。具體如下,我們將 Mysql對應的 jdbc jar 包匯入其中。

  • 建立一個webapp(給這個webapp新增servlet-api.jar和jsp-api.jar到classpath當中。)
  • 向webapp中新增連線資料庫的jar包(mysql驅動)
    • 必須在WEB-INF目錄下新建lib目錄,然後將mysql的驅動jar包拷貝到這個lib目錄下。這個目錄名必須叫做lib,全部小寫的。

2.2 模組目錄結構

2.3 工具類 DBUtil

這裡因為我們要連線資料庫,所以我們編寫一個連線Mysql 資料庫的 工具類,這裡我們名為一個 DBUtil 的工具類。

這裡我們通過讀取設定jdbc.properties的組態檔的方式,註冊相對應的Mysql驅動

如下是相關: jdbc.properties 的設定資訊

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
user=root
password=123

再編寫好相關的:DBUtil 類 ,具體程式碼的編寫內容如下:

package com.RainbowSea.DBUtil;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

/**
 * JDBC工具類
 */
public class DBUtil {

    // 靜態變數,在類載入時執行
    // 都是一些從 jdbc.properties 讀取到的組態檔的資訊
    // 該方法僅僅只會讀取 「.properties" 的字尾的檔案,注意:預設是從src目錄開始的,有子目錄需要寫明子目錄
    private static ResourceBundle bundle = ResourceBundle.getBundle("com/RainbowSea/resources/jdbc");
    private static String driver = bundle.getString("driver"); // 根據properties中的name讀取對應的value值
    private static String url = bundle.getString("url");
    private static String user = bundle.getString("user");
    private static String password = bundle.getString("password");


    static {
        // 註冊驅動(註冊驅動只需要註冊一次,放在靜態程式碼當中,DBUtil類載入的時候執行)
        // "com.mysql.jdbc.Driver"是連線資料庫的驅動,不能寫死,因為以後可能還會連線Oracle資料庫。
        // OCP開閉原則: 對擴充套件開放,對修改關閉(什麼是符合 OCP呢?在進行功能擴充套件的時候,不需要修改java原始碼)
        // Class.forName("com.mysql.jdbc.Driver")

        try {
            Class.forName(driver);  // 載入驅動
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }

    }


    /**
     * 獲取資料庫連線
     * @return Connection
     */
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url,user,password);
    }


    /**
     * 關閉連線
     * @param connection
     * @param statement
     * @param resultSet
     */
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        // 注意:分開try,最後使用的資源,優先關閉
        if(resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if(statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }


        if(connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

2.4 功能一: index.html 該專案的歡迎頁面如下:

預設在 web 當中,一個全域性設定資訊當中,會將名為 index.html 的檔案,設定為該專案的歡迎頁面。相應的具體內容大家可以移步至