首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

利用 Servlet 開發企業級三層 Web 應用(二):中間層實作與進階探討

     編輯:Java 相關知識

承接第一部分的架構規劃,本文以圖書管理系統為例,深入實作中間層 BookServlet,展示 Servlet 如何處理資料庫連線、請求分派、查詢與寫入邏輯,並探討其相較 CGI 的效能與可攜性優勢。

中間層 Servlet 實作細節

1. 初始化階段:建立資料庫連線

public class BookServlet extends HttpServlet {
    protected Connection dbConnection;
    protected PreparedStatement readQuery, writeQuery;
    protected String dbName = "jdbc:odbc:BookDatabase";
    protected String bookName, bookISBN;

    public void init(ServletConfig config) throws ServletException {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            dbConnection = DriverManager.getConnection(dbName, "", "");
        } catch (Exception e) {
            System.out.println("Can not initialize database");
        }
    }
}

init() 在 Servlet 首次被喚醒時調用,此處建立 JDBC Connection 物件連接 ODBC 定義的 BookDatabase。連線物件作為實例變數保持,避免每請求重建連線開銷。

2. 服務階段:請求分派與業務邏輯

public void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    bookName = request.getParameter("BookName");
    bookISBN = request.getParameter("BookISBN");
    if (bookName == null && bookISBN == null) {
        doQueryBook(request, response);
    } else {
        doNewBook(request, response);
    }
}

根據前端表單參數決定執行查詢或新增:若無參數則顯示所有圖書,若有參數則寫入新紀錄。

3. 查詢資料庫並回傳 HTML 結果頁

public void doQueryBook(HttpServletRequest request, HttpServletResponse response) {
    try {
        readQuery = dbConnection.prepareStatement("SELECT * FROM BOOKTABLE");
        String htmlHead = "查詢結果";
        String htmlBody = "";
        ResultSet rs = readQuery.executeQuery();
        while (rs.next()) {
            String name = rs.getString("BookName");
            String isbn = rs.getString("ISBN");
            htmlBody += name + " " + isbn + "
"; } htmlBody += ""; PrintWriter out = new PrintWriter(response.getOutputStream()); response.setContentType("text/html"); out.println(htmlHead + htmlBody); } catch (Exception e) { /* 錯誤處理 */ } }

使用 PreparedStatement 執行查詢,逐筆讀取 ResultSet 並拼接 HTML 字串,最後透過 PrintWriter 輸出至瀏覽器。

4. 寫入資料庫

String writeSql = "INSERT INTO BookTable (BookName, ISBN) Values('" 
        + bookName + "','" + bookISBN + "')";
writeQuery = dbConnection.prepareStatement(writeSql);
writeQuery.executeUpdate();

構建動態 SQL 插入新紀錄,呼叫 executeUpdate() 執行。

Servlet 實現中間層的優勢總結

透過上述範例可見,Servlet 技術實作中間層具備:

  • 高效能:基於執行緒模型,不像 CGI 每請求產生獨立進程,大幅降低系統開銷
  • 可攜性:純 Java 實作,跨平台部署無虞
  • 程式碼重用:物件導向特性促進模組化與重用
  • 擴充性:可利用 Sockets 與其他 Servlet 或 Applet 通訊,構建更複雜的分散式 Web 應用

這使得 Servlet 成為 Java 技術棧下企業級三層 Web 架構中間層的首選方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved