Java-servlet(七)詳細講解Servlet注解

Java-servlet(七)詳細講解Servlet注解

  • 前言
  • 一、注解的基本概念
  • 二、@Override 注解
      • 2.1 作用與優勢
      • 2.2 示例代碼
  • 三、@Target 注解
      • 3.1 定義與用途
      • 3.2 示例代碼
  • 四、@WebServlet 注解
      • 4.1 作用
      • 4.2 示例代碼
  • 五、反射與注解
      • 5.1 反射的概念
      • 5.2 注解與反射的結合使用
  • 六、為什么選擇 Servlet 注解
  • 七、其他常見的 Servlet 注解及使用方法
      • 7.1 `@WebFilter` 注解
      • 7.2 `@WebListener` 注解


前言

  • 在 Java Web 開發中,Servlet 是構建 Web 應用程序的基礎組件
  • 而注解作為 Java 語言的一項重要特性,在 Servlet 開發中也發揮著關鍵作用。
  • 通過注解,我們可以更加簡潔、高效地配置和管理 Servlet 相關的代碼
  • 本文將深入探討 Java Servlet 注解的相關知識。

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章專欄
歡迎來閱讀指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

在這里插入圖片描述

一、注解的基本概念

  • 注解(Annotation)是 JDK 1.5 引入的新特性,它提供了一種將元數據嵌入代碼的方式
  • 注解本身不會對代碼邏輯產生直接影響,但可被工具(如編譯器、IDE、運行時環境)用于處理和分析代碼。注解使用 @ 符號聲明,像 @Override@Deprecated 等都是常見的注解。

簡單來說,注解的作用是簡化 web.xml 的配置,能替代 web.xml 中的 <servlet><servlet - mapping> 等配置,有助于更好地配置 Java 文件,

  • 注解甚至可以完全取代 web.xml 配置

二、@Override 注解

2.1 作用與優勢

@Override 注解是 Java 中常用的注解之一,用于標識一個方法是重寫父類中的方法。使用它有以下好處:

好處說明
編譯器檢查編譯器會檢查被 @Override 注解的方法是否真的重寫了父類的方法,若不是則報錯,避免因方法簽名錯誤導致的運行時錯誤。
代碼可讀性使代碼更清晰,讓閱讀者一眼就能看出該方法是重寫方法。

2.2 示例代碼

以下是 @Override 注解在 Servlet 中的使用示例:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {// 業務邏輯
}

詳細代碼如下:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解決亂碼resp.setContentType("text/html");resp.setCharacterEncoding("UTF-8");//獲取請求參數String username = req.getParameter("username");String password = req.getParameter("password");//返回到頁面顯示resp.getWriter().write("歡迎" + username + "你的密碼是:" + password);}
}
  • 這里 @Override 注解的作用是標記 doGet 方法為父類方法的重寫
  • 其優勢在于讓編譯器檢查重寫的合法性,避免拼寫錯誤。

三、@Target 注解

3.1 定義與用途

@Target 注解用于指定一個注解可以應用到哪些元素上。其定義如下:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {ElementType[] value();
}

ElementType 是一個枚舉類型,定義了可以應用注解的元素類型,常見的有:

元素類型說明
TYPE應用于類、接口(包括注解類型)和枚舉類型。
FIELD應用于字段(包括枚舉常量)。
METHOD應用于方法。
PARAMETER應用于方法的參數。
CONSTRUCTOR應用于構造函數。
LOCAL_VARIABLE應用于局部變量。

3.2 示例代碼

以下是自定義注解并使用 @Target 注解限制其應用范圍的示例:

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
public @interface MyMethodAnnotation {String value() default "";
}

上述代碼定義了一個 @MyMethodAnnotation 注解,它只能應用于方法上。

四、@WebServlet 注解

4.1 作用

@WebServlet 注解用于將一個類聲明為 Servlet,它可以替代 web.xml<servlet><servlet - mapping> 的配置。通過該注解,我們可以直接在 Servlet 類上指定訪問路徑、初始化參數等信息。

4.2 示例代碼

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("/myServlet")
public class MyWebServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("Hello from MyWebServlet!");}
}

在上述代碼中,@WebServlet("/myServlet") 表示該 Servlet 的訪問路徑為 /myServlet。當客戶端訪問該路徑時,會執行 doGet 方法并返回響應信息。

五、反射與注解

5.1 反射的概念

反射是 Java 語言的強大特性,它允許程序在運行時獲取類的信息,包括類的屬性、方法、構造函數等。

5.2 注解與反射的結合使用

注解與反射結合,可以在運行時動態地處理注解信息。例如,通過反射獲取一個類中被特定注解標記的方法,并執行這些方法:

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;public class AnnotationReflectionExample {@MyMethodAnnotation("example method")public void myMethod() {System.out.println("This is my method.");}public static void main(String[] args) throws NoSuchMethodException {AnnotationReflectionExample example = new AnnotationReflectionExample();Class<?> clazz = example.getClass();Method method = clazz.getMethod("myMethod");MyMethodAnnotation annotation = method.getAnnotation(MyMethodAnnotation.class);if (annotation != null) {System.out.println("Annotation value: " + annotation.value());try {method.invoke(example);} catch (Exception e) {e.printStackTrace();}}}
}

在上述代碼中,通過反射獲取了 myMethod 方法上的 @MyMethodAnnotation 注解,并執行了該方法。

六、為什么選擇 Servlet 注解

在 Servlet 開發中使用注解有以下優點:

優點說明
簡化配置傳統的 Servlet 配置需在 web.xml 文件中進行繁瑣配置,使用注解可直接在代碼中配置,使代碼更簡潔。
提高開發效率注解可在編譯時進行檢查,及時發現錯誤,減少調試時間。
代碼維護性好注解與代碼緊密結合,使代碼意圖更清晰,便于維護和理解。

七、其他常見的 Servlet 注解及使用方法

7.1 @WebFilter 注解

@WebFilter 注解用于將一個類聲明為過濾器,它可以指定過濾器的過濾路徑、初始化參數等

import javax.servlet.annotation.WebFilter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;@WebFilter("/filter/*")
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化過濾器}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Before filter");filterChain.doFilter(servletRequest, servletResponse);System.out.println("After filter");}@Overridepublic void destroy() {// 銷毀過濾器}
}

7.2 @WebListener 注解

@WebListener 注解用于將一個類聲明為監聽器,它可以監聽 Servlet 上下文、會話、請求等事件

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;@WebListener
public class MySessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent se) {System.out.println("Session created: " + se.getSession().getId());}@Overridepublic void sessionDestroyed(HttpSessionEvent se) {System.out.println("Session destroyed: " + se.getSession().getId());}
}

以上就是這篇博客的全部內容,下一篇我們將繼續探索 Java-servlet 的更多精彩內容。

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章專欄
歡迎來閱讀指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

非常感謝您的閱讀,喜歡的話記得三連哦

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74127.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習——分類、回歸、聚類、LASSO回歸、Ridge回歸(自用)

糾正自己的誤區&#xff1a;機器學習是一個大范圍&#xff0c;并不是一個小的方向&#xff0c;比如&#xff1a;線性回歸預測、卷積神經網絡和強化學都是機器學習算法在不同場景的應用。 機器學習最為關鍵的是要有數據&#xff0c;也就是數據集 名詞解釋&#xff1a;數據集中的…

本地AI大模型工具箱 Your local AI toolkit:LMStudio

LMStudio介紹 官網&#xff1a;LM Studio - Discover, download, and run local LLMs LMStudio 是一個面向機器學習和自然語言處理的&#xff0c;旨在使開發者更容易構建和部署AI語言模型的應用軟件。 LMStudio的特點是&#xff1a; 完全本地離線運行AI大模型 可以從Huggi…

[OpenCV】相機標定之棋盤格角點檢測與繪制

在OpenCV中&#xff0c;棋盤格角點檢測與繪制是一個常見的任務&#xff0c;通常用于相機標定。 棋盤格自定義可參考: OpenCV: Create calibration pattern 目錄 1. 棋盤格角點檢測 findChessboardCorners()2. 棋盤格角點繪制 drawChessboardCorners()3. 代碼示例C版本python版本…

redis的典型應用 --緩存

Redis最主要的用途&#xff0c;分為三個方面&#xff1a; 1.存儲數據&#xff08;內存數據庫&#xff09; 2.緩存&#xff08;最常用&#xff09; 3.消息隊列 緩存 (cache) 是計算機中的?個經典的概念。核?思路就是把?些常?的數據放到觸?可及(訪問速度更快)的地?&…

本地基于Ollama部署的DeepSeek詳細接口文檔說明

前文&#xff0c;我們已經在本地基于Ollama部署好了DeepSeek大模型&#xff0c;并且已經告知過如何查看本地的API。為了避免網絡安全問題&#xff0c;我們希望已經在本地調優的模型&#xff0c;能夠嵌入到在本地的其他應用程序中&#xff0c;發揮本地DeepSeek的作用。因此需要知…

基于ArcGIS和ETOPO-2022 DEM數據分層繪制全球海陸分布

第〇部分 前言 一幅帶有地理空間參考、且包含海陸分布的DEM圖像在研究區的繪制中非常常見&#xff0c;本文將實現以下圖像的繪制 關鍵步驟&#xff1a; &#xff08;1&#xff09;NOAA-NCEI官方下載最新的ETOPO-2022 DEM數據 &#xff08;2&#xff09;在ArcGIS&#xff08;…

自動化測試框架pytest+requests+allure

Pytest requests Allure 這個框架基于python的的 Pytest 進行測試執行&#xff0c;并結合 Allure插件 生成測試報告的測試框架。采用 關鍵字驅動 方式&#xff0c;使測試用例更加清晰、模塊化&#xff0c;同時支持 YAML 文件來管理測試用例&#xff0c;方便維護和擴展。 測試…

Retrofit中scalars轉換html為字符串

簡介 在Retrofit中&#xff0c;如果你想直接獲取HTML或其他文本格式的響應內容而不是將其映射到一個模型類&#xff0c;ScalarsConverterFactory 就派上用場了。ScalarsConverterFactory 是一個轉換器工廠&#xff0c;它能夠將響應體轉換為Java基本類型如String、Integer或Byte…

Powershell WSL Windows系統復制數據到ubuntu子系統系統

從本地D盤下拷貝數據到ubuntu子系統下 Powershell 管理員打開執行 /mnt/d 此處是本地Windows系統的路徑表示/opt ubutu 子系統目錄 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/從ubuntu子系統中拷貝數據到本地D盤下 Powershell 管理員打開執行…

【多線程】線程安全集合類,ConcurrentHashMap實現原理

文章目錄 線程安全集合類解決方案多線程環境使用順序表多線程環境使用隊列多線程環境使用哈希表ConcurrentHashMap1. 縮小鎖的粒度2. 充分使用 CAS3. 針對擴容操作 線程安全集合類 ArrayList、Queue、HsahMap… 都是線程不安全的 Vector、Stack、Hashtable 都是線程安全的&am…

spring-tx筆記

編程式事務與聲明式事務的理解 補充&#xff1a;什么是事務&#xff1f; 事務是一個重要概念&#xff0c;尤其在數據庫管理系統中。事務是指一組操作。&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部不執行&#xff0c;確保數據的一致性和完整性 編程式事務 編…

Android第四次面試(Java基礎篇)

一、Java 中的 DCL 單例模式 單例模式是設計模式中最常用的模式之一&#xff0c;其核心目標是確保一個類在程序中僅有一個實例&#xff0c;并提供全局訪問點。在 Java 中&#xff0c;實現單例模式需要兼顧線程安全和性能優化。DCL&#xff08;Double-Checked Locking&#xff0…

Java-SpringBootWeb入門、Spring官方腳手架連接不上解決方法

一. Spring 官網&#xff1a;Spring | Home Spring發展到今天已經形成了一種開發生態圈&#xff0c;Spring提供了若干個子項目&#xff0c;每個項目用于完成特定的功能(Spring全家桶) Spring Boot可以幫助我們非常快速的構建應用程序、簡化開發、提高效率 。 二. Spring Boot入…

1.7 無窮小的比較

1.定義 2.性質 3.無窮小的比較 3.1等價無窮小的性質 3.2 常見等價無窮小

StarRocks 升級注意事項

前段時間升級了生產環境的 StarRocks&#xff0c;從 3.3.3 升級到了 3.3.9&#xff0c;期間還是踩了不少坑所以在這里記錄下。 因為我們的集群使用的是存算分離的版本&#xff0c;也是使用官方提供的 operator 部署在 kubernetes 里的&#xff0c;所以沒法按照官方的流程進入虛…

深入探究 JVM 堆的垃圾回收機制(一)— 判活

垃圾回收分為兩步&#xff1a;1&#xff09;判定對象是否存活。2&#xff09;將“消亡”的對象進行內存回收。 1 判定對象存活 可達性分析算法&#xff1a;通過一系列“GC Roots”對象作為起始節點集&#xff0c;從這些節點開始&#xff0c;根據引用關系向下搜索&#xff0c;…

國產開發板—米爾全志T113-i如何實現ARM+RISC-V+DSP協同計算?

近年來&#xff0c;隨著半導體產業的快速發展和技術的不斷迭代&#xff0c;物聯網設備種類繁多&#xff08;如智能家居、工業傳感器&#xff09;&#xff0c;對算力、功耗、實時性要求差異大&#xff0c;單一架構無法滿足所有需求。因此米爾推出MYD-YT113i開發板&#xff08;基…

Tomcat虛擬主機配置詳解:Centos環境下多域名部署(詳細教程!)

&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; Tomcat服務器&#x1f4dd;專欄&#xff1a;點擊&#xff01; &#x1f427;Linux高級管理防護和群集專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2025年3月18日14點14分 最近在折騰 Tomcat 的時候&…

鴻蒙開發工程師簡歷項目撰寫全攻略

一、項目結構的黃金法則 建議采用「41」結構&#xff1a; 項目背景&#xff08;業務價值&#xff09;技術架構&#xff08;鴻蒙特性&#xff09;核心實現&#xff08;技術難點&#xff09;個人貢獻&#xff08;量化成果&#xff09;附加價值&#xff08;延伸影響&#xff09; …

dfs刷題排列問題 + 子集問題 + 組和問題總結

文章目錄 一、排列問題全排列II題解代碼 優美的排列題解代碼 二、子集問題字母大小寫全排列題解代碼 找出所有子集的異或總和再求和題解代碼 三、組合問題電話號碼的字母組合題解代碼 括號生成題解代碼 組合題解代碼 目標和題解代碼 組合總和題解代碼 總結 一、排列問題 全排列…