1. 程式人生 > >Servlet與Tomcat執行示例

Servlet與Tomcat執行示例

Servlet與Tomcat執行示例

本文將寫一個servlet,然後將其部署到Tomcat的全過程。本文參考《深入拆解Tomcat_Jetty》內容。

一、基於web.xml開發步驟

  1. 下載、安裝 Tomcat。
  2. 編寫一個繼承 HTTPServlet 的 Java 類MyServlet。
  3. 將 Java 類檔案編譯成 Class 檔案。
  4. 建立 Web 應用的目錄結構,並配置 web.xml。
  5. 部署 Web 應用。
  6. 啟動 Tomcat。
  7. 瀏覽器訪問驗證結果。
  8. 檢視 Tomcat 日誌。

1 下載、安裝Tomcat

去Tomcat官網(https://tomcat.apache.org/download-90.cgi)

下載最新的Tomcat(需下載對應系統版本,請根據實際情況選擇,本文以MacOS系統為例)。下載完成之後解壓即可。

file

2 編寫MyServlet類

編寫一個MyServlet類,其繼承HttpServlet類,並複寫其doGet()和doPost()方法。

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * @Version V1.0
 * @Description: MyServlet 類
 */
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在處理 get()請求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doGet My Servlet!</strong><br>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在處理 post()請求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doPost My Servlet!</strong><br>");
    }
}

3 編譯MyServlet

因為這裡我們不採用IDE的方式,所以在編譯MyServlet.java類時,我們使用javac的命令。但是我們需要注意,因為我們在MyServlet類中繼承了HttpServlet,而HttpServlet並不是jdk自帶的class,所以需要帶上HttpServlet所在的jar包一起進行打包!不然會出現以下錯誤資訊:

我們先將Tomcat解壓目錄 lib/下的servlet-api.jar拷貝到MyServlet.java同級目錄,然後執行以下命令,即可將MyServlet進行編譯:

javac -cp ./servlet-api.jar MyServlet.java

4 建立 Web 應用目錄

建立資料夾,也就是專案工程 MyWebApp, 其目錄主要如下:

MyWebApp/WEB-INF/web.xml
MyWebApp/WEB-INF/classes/MyServlet.class

其中,web.xml的內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
 
    <description> Servlet Example. </description>
    <display-name> MyServlet Example </display-name>
    <request-character-encoding>UTF-8</request-character-encoding>
 
    <servlet>
      <servlet-name>myServlet</servlet-name>
      <servlet-class>MyServlet</servlet-class>
    </servlet>
 
    <servlet-mapping>
      <servlet-name>myServlet</servlet-name>
      <url-pattern>/myservlet</url-pattern>
    </servlet-mapping>
 
</web-app>

5 部署 MyWebApp 應用

將這個目錄 MyWebApp 拷貝到 Tomcat 的安裝目錄下的 webapps 目錄:

6 啟動 Tomcat

找到 Tomcat 安裝目錄下的 bin 目錄,如果是 Windows 系統,執行 startup.bat;如果是 Linux 系統,則執行 startup.sh

7 瀏覽器訪問

在瀏覽器裡訪問這個 URL: http://localhost:8080/MyWebApp/myservlet

同樣,post方式呼叫也會得到相類似的結果!

8 檢視 Tomcat 日誌

我們可以看下tomcat/logs下的catalina.out檔案,使用以下命令檢視相應的日誌:

tail -100f catalina.out

二、基於註解@WebServlet開發

步驟基本上同上述基於web.xml一致,有以下幾點不同之處!

1 不同之處1: MyServlet類的程式碼

在MyServlet上新增@WebServlet程式碼,具體如下:

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;

/**
 * @Version V1.0
 * @Description: MyServlet 類
 */
@WebServlet("/myAnnotationServlet")
public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在處理 get()請求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doGet My Servlet!</strong><br>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("MyServlet 在處理 post()請求...");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=utf-8");
        out.println("<strong>doPost My Servlet!</strong><br>");
    }
}

2 不同之處2: 去除web.xml配置

MyWebApp專案下不需要再配置web.xml,因為在註解中已經對其進行了相關的配置。

3 不同之處3: 訪問地址變化

因為在@WebServlet中配置了的路徑為/myAnnotationServlet,故而此處訪問路徑應為: http://localhost:8080/MyWebApp/myAnnotationServlet

剩下步驟與基於web.xml配置基本一致,不再細述!後期將就本案例講解分析Tomcat是如何載入並執行此Servlet的!

微信公眾號: 原始碼灣

歡迎關注本人微信公眾號: 原始碼灣。 本公眾號將不定期進行相關原始碼及相關開發技術的分享,共同成長,共同進步~

感謝您的觀看,如有寶貴意見,煩請及時提出,謝謝。歡迎關注微信公眾