Java Servlet

      在〈Java Servlet〉中尚無留言

Java Servlet 並不屬於 Java SE(Standard Edition),它是一種擴充套件,稱為 Jakarta EE,專門用於處理 Web 應用相關的需求。要使用 Servlet 功能,必須透過支援 Java EE 的 Web 容器,例如 Tomcat、Jetty 或 GlassFish,這些容器會內建提供所需的 Servlet API。

若不使用這些容器,也可以手動引入相應的 JAR 檔(如 jakarta.servlet-api.jar),即可在專案中使用 Servlet 技術。

PHP、Python Web、Java Web

php

在 PHP 的網頁開發中,除了可撰寫純 .html 的靜態頁面外,也常使用 .php 副檔名來建立動態網頁。.php 檔案會由 PHP 伺服器解析並執行內部的程式碼,最後輸出成 HTML 格式,傳送至用戶端瀏覽器顯示。 .php 檔案本質上是 HTML 文件中嵌入 PHP 程式碼的結合體。PHP 程式區塊通常以 <?php …. ?>  作為標記,用來分隔 HTML 與 PHP 程式碼。PHP 的語法與 C 語言相似,這種將程式邏輯與畫面結合的寫法,在大型專案中可能會導致程式碼結構混亂,維護上較為困難。

Python Web

在 Python 的 Web 框架中,Django 是目前較為普及的套件。Django 不是 Web Server,它只是一個框架。可以讓開發者能以純 Python 撰寫後端邏輯、模板以及靜態 HTML 頁面。 

Python Web 是目前超流行的框架,因為有關 AI 的應用都是以 Python 開發。所以要製作有關 AI 的網站,Python Web 是最佳選擇。

Java Web

在 Java Web 開發中,常見的做法是使用 Tomcat 作為 Web Server,再透過 Servlet 技術撰寫純 Java 的後端程式碼。JSP(JavaServer Pages)則是一種嵌入於 HTML 中的語法,用來與後端進行資料交換與畫面呈現,其概念類似於 Python 的模板引擎。 早期 JSP 曾被視為有潛力取代 PHP 的技術,因為它同時具備動態內容與 Java 的穩定性。然而,隨著專案規模增長,JSP 的頁面往往容易變得雜亂,將商業邏輯與畫面混在一起,導致程式碼難以維護。因此在後來的開發實務中,越來越多開發者轉向使用 Servlet 或其他更具架構化的 MVC 框架,如 Spring MVC,以達到更好的模組分離與可維護性。

gradle專案

開發 Java Web 的首選 IDE 以 NetBeans 為主,因為 Intellij Idea 需要 Profession 付費版才支援 Java Web。

開啟新專案

由 File/New Project,選取 Java with Gradle/Web Application

指定 Location 後,填入專案名稱 tomcat,然後把 Package Name Base 刪除

接著在 Server 按下 Add,選取 Apache Tomcat or TomEE

Server Location 選擇 C:\Program Files\Apache Software Foundation\Tomcat 11.0,Username/Password 填入 Tomcat 安裝時的帳號及密碼。

最後會回到上二圖,其中 Context Path 一定為 /xxx,不可以為 「/」或空格,因為 「/」已被系統 Tomcat 佔用了。

build.gradle 設定

build.gradle 需設定如下

🔒 更多內容,請登入會員繼續閱讀。

立即登入

相關目錄

使用 gradle 建立專案後,會在專案下產生如下目錄

src/main/java : Servlet 及 自訂 sdk 的位置
src/main/webapp : 靜態網頁(static)、圖片(pictures)、template 存放位置
build/exploded/xxx.war : Shift + F11 後網頁發佈位置,也是 Tomcat docBase 要指定的位置。

Ant 新專案

開啟新專案

由 File/New Project,選取 Java with Ant/java/Web,右邊 Project 選取 Web Appliction。

接下來輸入 Project Name

專案目錄

專案開啟後,如下目錄請熟記。

build : Clean and Build 後網頁所發佈的位置,亦是 Tomcat 的網頁根目錄。

dist : 編譯後 .war 所在位置。

src : Servlet 的位置

web : 模板、static(靜態網頁)、jsp 所在的位置。todo

網頁根目錄

此時網頁根目錄還未產生,需執行 Run/Clean and Build,或按 Shift+F11,才會在專案下產生 build\web 目錄,build\web 就是網頁根目錄

接下開啟 C:\Program Files\Apache Software Foundation\Tomcat 11.0\conf\server.xml,將 docBase 改成如下。

<Context path="/" docBase="E:/server/mahalrtc/build/web" debug="0" reloadable="true"/>

重啟 Tomcat 後,在瀏覽器輸入 http://localhost 即可看到第一個網頁。

設定首頁

C:\Program Files\Apache Software Foundation\Tomcat 11.0\conf\web.xml 已預設三個首頁,分別是 index.html、index.htm、index.jsp。如果要使用 /index 為首頁,則需修改 web.xml 成如下。

<welcome-file-list>
    <welcome-file>index</welcome-file>  
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>  

上述的 index 不可以寫成 /index 。修改完後記得重新啟動 Tomcat。

新增 Servlet

專案一開始會幫我們設定一個純 html 的 index.html。

如果想要使用 Servlet 製作網頁,請在 Source Packages 按右鍵/new Servlet,Class Name 輸入 index,Package 輸入自已的網域,比如 net.ddns.mahaljsp。

在 Configure Servlet Deployment 的 Add information to deployment desciptor(web.xml) 不需要打勾, URL Patten 請依預設的「/index」,然後按下 Shift + F11 進行編譯。

最後重啟 Tomcat 即可在瀏覽器 http://localhost:8085/index 看到網頁。請注意,只要新增 Servlet 就一定要重啟 Tomcat。

新增 Java Class

資深開發人員幾乎不會使用 new Servlet,而是直接 new java Class,然後手動輸入如下。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

MySQL 連線

JDBC 驅動

請先到 MySQL 官網 https://dev.mysql.com/downloads/connector/j/ 下載最新版本的驅動程式,Operating System 請選取 Platform Independent,然後再選取 zip 檔。

下載完成後請將 zip 檔解開,在 NetBeans 的 Libraries 按右鍵 Add JAR/Folder,然後選定 mysql-connector-j-8.4.0.jar,當執行編譯時,此 .jar 會自動複製到專案下的 build\web\WEB-INF\lib 之下。

WEB-INF\lib 日後會手動複製到 Tomcat docBase 目錄下,所以不需要再複製到系統級的 C:\Program Files\Apache Software Foundation\Tomcat 11.0\lib。但如果是在 JSP 網頁使用資料庫連線,還是需要手動複製一份到 Tomcat 11.0\lib。

Gradle

若使用 gradle 開啟新專案,請在 build.gradle 的 dependencies 新增如下設定,即可自動下載 JDBC 驅動程式。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

Servlet 網頁

撰寫 Servlet 網頁時,有幾個坑要避開。

手動輸入 java.sql

NetBeans 有 Bug,需手動在程式碼中輸入如下

import java.sql.*

載入驅動程式

Java 6 開始不用手動載入驅動程式,但在 Servlet 還是需要手動載入驅動程式,否則會出現如下錯誤

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/xxxx(資料庫)

手動載入驅動程式如下所示。

try{
    Class.forName("com.mysql.cj.jdbc.Driver");
}
catch (ClassNotFoundException ex){
    out.println(ex.toString());
}

完整代碼

請新增一個 Servlet 網頁,輸入如下完整的代碼

🔒 更多內容,請登入會員繼續閱讀。

立即登入

JSP網頁

底下是使用 jsp 網頁的寫法。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

會員登入系統

Servlet 的運作方式如果用文字描述,一大篇文章也寫不完,直接實作會員登入系統看程式碼是最為快速的方法。

會員登入系統分為登入表單 (login.jsp),登入處理程式 (login.java),即登入成功畫面 (welcome.jsp)。

login.jsp

首先在專案按右鍵/New/JSP,File Name 輸入 login,完整代碼如下。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

Login.java

在專案下按「右鍵/New/Servlet」,Class Name 輸入 login,完整代碼如下。

🔒 更多內容,請登入會員繼續閱讀。

立即登入

welcome.jsp

因為上述 login.java 如果登入成功會自動轉跳 welcome.jsp,所以就隨意寫個測試程式,代碼如下

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>歡迎光臨</h1>
    </body>
</html>

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *