Servlet p1 Servlet的實現

来源:https://www.cnblogs.com/zh-Note/archive/2023/06/12/17476278.html
-Advertisement-
Play Games

學習課程: 【這可能是B站講的最好的Servlet教程,5小時打通Servlet全套教程丨2022最新版,輕鬆掌握servlet基礎+案例實操】 https://www.bilibili.com/video/BV1Kr4y1V7ZE/?share_source=copy_web&vd_source= ...


學習課程: 【這可能是B站講的最好的Servlet教程,5小時打通Servlet全套教程丨2022最新版,輕鬆掌握servlet基礎+案例實操】 https://www.bilibili.com/video/BV1Kr4y1V7ZE/?share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e0549e

Servlet的實現

基本介紹

​ Servlet是Server與Applet的縮寫,是服務端小程式的總思。使用Java語言編寫的伺服器端程式,可以像生成動態的WEB頁,Servlet主要運行在伺服器端,並由伺服器調用執行,是一種按照Servlet標準來開發的類。是SUN公司提供的一門用於開發動態Web資源的技術。(言外之意:要實現web開發,需要實現Servlet標準)

​ 它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 伺服器上的資料庫或應用程式之間的中間層。使用 Servlet,您可以收集來自網頁表單的用戶輸入,呈現來自資料庫或者其他源的記錄,還可以動態創建網頁。

​ Servlet本質上也是Java類,但要遵循Servlet規範進行編寫,沒有main()方法,它的創建、使用、銷毀都由Servlet容器進行管理(如Tomcat)。(言外之意:寫自己的類,不用寫main方法,別人自動調用)

​ Servlet是和HTTP協議是緊密聯繫的,其可以處理HTTP協議相關的所有內容。這也是Servlet應用廣泛的原因之一。
提供了Servlet功能的伺服器,叫做Servlet容器,其常見容器有很多,如Tomcat,Jetty,WebLogic,Server,WebSphere,JBoss等等。

Servlet架構:

Servlet架構

實現Servlet規範

​ 實現 Servlet 規範,即繼承 HttpServlet 類,需要導入相應的包,(在此之前需要導入對應的servlet的jar包)。該類中已經完成了通信的規則,我們只需要進行業務的實現即可。

import javax.servlet.http.HttpServlet;

public class servlet01 extends HttpServlet{
}

重寫service方法和設置註解

  • 重寫service方法

    ​ 滿足Servlet規範只是讓我們的類能夠滿足接收請求的要求,接收到請求後需要對請求進行分析,以及進行業務邏輯處理,計算出結果,則需要添加代碼,在Servlet中有一個叫做service的方法,專門用來做請求處理的操作,業務代碼則可以寫在該方法中。

    ​ service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 伺服器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,並把格式化的響應寫回給客戶端。

    ​ 每次伺服器接收到一個 Servlet 請求時,伺服器會產生一個新的線程並調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),併在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。

  • 設置註解

    ​ 在完成好了一切代碼的編寫後,還需要向伺服器說明,特定請求對應特定資源。

    ​ 開發servletI項目,使用@WebServlet將一個繼承於javax.servlet.http,HttpServlet的類定義為Servlet組件。
    在Servlet3.0中,可以使用@VebServleti註解將一個繼承於javax.servlet.http.HttpServlet的類標註為可以處理用
    戶請求的Servlet。

package com.xxxx.servlet;

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;

//@WebServlet("/ser01")
//@WebServlet(name = "Servlet01", value = "/ser01")//name就是一個名字可寫可不寫,value後面可以接數組,數組中的地址都可以訪問到該頁面
//@WebServlet(name = "Servlet01", value = {"/ser01", "/ser001"})
@WebServlet("/ser01")//路徑中的 "/" 一定不能忘
public class Servlet01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Hello Servlet!");

        resp.getWriter().write("Hello Servlet!");
    }
}

實現Servlet的方式

  1. 繼承HttpServlet類
  2. 繼承GenericServlet類:GenericServlet類是HttpServlet類的父類,所以也可以用來實現Servlet;
  3. 實現Servlet介面:GenericServlet類也實現了Servlet介面,實現Servlet介面也可以使用Servlet;

以上三種方式通常使用HttpServlet,方法也更全面;

繼承GenericServlet類:

package com.xxxx.servlet;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/ser02")
public class servlet02 extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("繼承GenericServlet類...");//GenericServlet是HttpServlet的父類
    }
}

實現Servlet介面:

package com.xxxx.servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/ser03")
public class servlet03 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("實現Servlet介面");//GenericServlet實現了該介面
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • - 前言 - Instant add or drop column的主線邏輯 - 表定義的列順序與row 存儲列順序闡述 - 引入row版本的必要性 - 數據腐化問題 - 原因分析 - Bug重現與解析 - MySQL8.0.30修複方案 ## 前言 DDL 相對於資料庫的 DML 之類的其他操作, ...
  • “聊技術無話不談,一起來吹吹元服務!暢聊你對元服務的想法,說不定,你就能撬動元服務的爆發增長!” 元服務(即原子化服務)是華為“輕量化”服務的新物種,可提供全新的服務和交互方式,讓應用化繁為簡,讓服務觸手可及!基於鴻蒙萬能卡片,元服務可實現應用功能在桌面“永遠打開”,實現智能推薦、服務直達! 而在元 ...
  • 前幾天打算給博客添加一個圖片預覽的效果,可在網上找了半天也沒找到合適的庫,於是自己乾脆自己手寫了個。 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言:我們知道同源策略可以隔離各個站點之間的 DOM 交互、頁面數據和網路通信,雖然嚴格的同源策略會帶來更多的安全,但是也束縛了 Web。這就需要在安全和自由之間找到一個平衡點,所以我們預設頁面中可以引用任意第三方資源,然後又引入 CSP ...
  • 無意中發現了一個問題:0.07*100=7.000000000000001,而不是7。 結果為什麼是7.0000000000000001? 其實JavsScript中,變數在存儲時並不區分number和float類型,而是統一按float存儲。而javascript使用IEEE 754-2008 標 ...
  • 概述 生命周期的每個階段總是伴隨著一些方法的調用,這些方法就是生命周期的鉤子函數 鉤子函數的作用:為開發人員在不同操作階段提供了十幾 只有 類組件 才有生命周期 生命周期的圖片: 同時有: 1.1 創建時 的生命周期執行順序 編寫以下代碼,從而驗證constructor,render,compone ...
  • 生活中我們經常談及 “架構”,那麼到底什麼是 “架構”,Robert C.Martin《架構整潔之道》中的定義:軟體架構是指設計軟體的人為軟體賦予的形狀,這個形狀是指系統如何被劃分為組件 (Components),各個組件如何排列(Arrangement),組件之間如何溝通(Communicatio... ...
  • ## 什麼是downlink數據 downlink指的是相機傳輸到host採集卡的高速鏈路,其中包含瞭如下類型的數據: 1、Stream Data 2、Trigger Ack, Trigger; 3、Ack (reply data); 4、Event, Heartbeat ![](https://i ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...