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
| 非常感谢您的阅读,喜欢的话记得三连哦 |

相关文章:
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 注解与反射的结合使…...
SQLark 实战 | 如何通过对象名和 DDL 快速搜索数据库对象
在数据库运维管理、应用开发和问题定位时,常常需要搜索相关的数据库对象。本文将为你介绍如何使用 SQLark 的搜索功能,实现对数据库对象的快速查找与定位。 👉 前往 SQLark 官网:www.sqlark.com 下载全功能免费版。 通过对象名称搜…...
C/S模型-TCP
下图是基于TCP协议的客户端/服务器程序的一般流程: TCP协议通讯流程 服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SY…...
51c自动驾驶~合集24
我自己的原文哦~ https://blog.51cto.com/whaosoft/11926510 #DriveArena 上海AI Lab又放大招:首个高保真闭环生成仿真平台 仓库链接:https://github.com/PJLab-ADG/DriveArena 项目链接:https://pjlab-adg.github.io/DriveArena/ D…...
19.哈希表的实现
1.哈希的概念 哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。 1.2.直接定址法…...
【PCB工艺】晶体管的发展历史
晶体管被认为是20世纪最伟大的发明之一,因为没有晶体管就不会有现代电脑、手机或平板,你也无法阅读到这里的内容,因为不存在网络。 ——本文纯粹出于对过往奋斗在这个领域中科学家的缅怀。科学家有太多宝贵的思想和经验值得我们认真总结和…...
通向AGI的未来之路!首篇2D/视频/3D/4D统一生成框架全景综述(港科大中山等)
文章链接: https://arxiv.org/pdf/2503.04641 摘要 理解并复现现实世界是人工通用智能(AGI)研究中的一个关键挑战。为实现这一目标,许多现有方法(例如世界模型)旨在捕捉支配物理世界的基本原理࿰…...
C# BindingFlags 使用详解
总目录 前言 在 C# 编程的世界里,反射(Reflection)是一个强大且灵活的特性,它允许我们在运行时动态地获取和操作类型的信息。而 BindingFlags 枚举类型,作为反射中的核心概念之一,为我们提供了精确控制类型…...
【亚马逊云科技】大模型选型实战(挑选和测评对比最适合业务的大模型)
文章目录 前言1、实验内容2、手册内容 一、环境准备二、Prompt 实战与模型配置2.1 基于 Amazon Bedrock 对比测试不同模型的逻辑推理效果2.2 基于 Amazon Bedrock 对比测试不同模型知识问答能力2.3 Prompt 实战结果分析 三、基于 Amazon Bedrock Evaluations 进行模型评测与自动…...
调用feapder作为子程序时setting.py文件不起作用
feaper 官方文档地址: 简介及安装 - feapder官方文档|feapder-document 问题: 在最近的开发中需要调用feapder作为主程序调用的子程序时发现自动入库时无法入库,通过查看日志信息发现连接数据库时被拒绝连接了,但是我的setting.p…...
神经网络量化3-全连接层实现量化
本节,我们模拟下全连接层实现量化,原理上为了方便计算,全连接矩阵采用动态量化的方法,而输入由于不断在变化,我们采用静态量化的方法,直接给出代码: import torch import numpy as np import m…...
【从零开始学习计算机科学】软件测试(九)Web系统测试 与 数据库测试
【从零开始学习计算机科学】软件测试(九)Web系统测试 与 数据库测试 Web系统测试Web系统基本组成Web系统的服务器端应用特点Web系统测试的分类Web应用系统测试的实施功能测试链接测试表单测试性能测试连接速度测试负载测试压力测试可用性测试导航测试图形测试内容测试表格测试…...
G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门
万事开源先修 Git。Git 是当下主流的分布式版本控制工具,在软件开发、文档管理等方面用处极大。它能自动记录文件改动,简化合并流程,还特别适合多人协作开发。学会 Git,就相当于掌握了一把通往开源世界的钥匙,以后参与…...
笔记:代码随想录算法训练营day58:101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿
学习资料:代码随想录 文中含大模型生成内容 101. 孤岛的总面积 卡码网:101. 孤岛的总面积 所以找周边都是水的陆地的方法就是找边缘的陆地然后删除它连同它的连通的陆地 深搜 #include <iostream> #include <vector> using namespac…...
5.0 VisionPro调用USB相机的方法与步骤说明(一)
本文介绍如何在C#中调用visionPro以处理USB相机采集到的图片。示例如下: 主要思路如下: 1. 使用AForge来打开以及采集usb相机照片。 usb相机处于一直运行状态。每隔100ms采集一次照片。且触发一次事件。 public void Start() { this.videoSourcePlayer.Stop(); …...
微信小程序计算属性与监听器:miniprogram-computed
小程序框架没有提供计算属性相关的 api ,但是官方为开发者提供了拓展工具库 miniprogram-computed。 该工具库提供了两个功能: 计算属性 computed监听器 watch 一、安装 miniprogram-computed 在项目的根目录下,使用如下命令,…...
强大的AI网站推荐(第二集)—— V0.dev
网站:V0.dev 号称:前端开发神器,专为开发人员和设计师设计,能够使用 AI 生成 React 代码 博主评价:生成的UI效果太强大了,适合需要快速创建UI原型的设计师和开发者 推荐指数:🌟&…...
整理和总结微信小程序的高频知识点
前言 近期萌生了一些想法,感觉可以做一个小程序作为产出。 但小程序做得比较少,因此边做边复习。整理和总结了一些高频知识点和大家一起分享。 一、模板和组件 1.1模板(Template) 优势 简单灵活:模板定义和使用都较…...
vue中js简单创建一个事件中心/中间件/eventBus
vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下: eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…...
01. Linux嵌入式系统学习笔记(一)
一. linux基础操作指令 1. 新建文件和目录 (1) 新建文件 touch 命令:用于创建空文件。 touch filename.txt 如果文件已存在,touch 会更新文件的访问时间和修改时间。 (2) 新建目录 mkdir 命令:用于创建目录。 mkdir directoryname 使…...
【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试
【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试 嵌入式系统测试测试策略及测试流程嵌入式软件测试问题及测试方法嵌入式软件的测试流程游戏开发与测试过程游戏开发与通用软件的开发过程区别游戏测试主要内容…...
# [RPA] 使用八爪鱼进行高效网页数据采集
在许多行业中,数据是核心资产。然而,虽然许多网站的文本内容可以免费访问,但手动一条一条采集,不仅耗时耗力,还容易出错。这种情况下,使用自动化工具来提高采集效率就显得尤为重要。本文将介绍 八爪鱼 这一…...
K8S学习之基础三十七:prometheus监控node资源
Prometheus v2.2.1 编写yaml文件,包含创建ns、configmap、deployment、service # 创建monitoring空间 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitor-sa# 创建SA并绑定权限 kubectl create serviceaccount monitor -n monito…...
#mapreduce打包#maven:could not resolve dependencies for project
打包报错: #报错信息: [ERROR] Failed to execute goal on project mapreduce_teacher1: Could not resolve dependencies for project org.example:mapreduce_teacher1:jar:1.0-SNAPSHOT: Failed to collect dependencies at org.apache.hive:hive-exe…...
QT软件匠心开发,塑造卓越设计服务
在当今这个数字化飞速发展的时代,软件已经成为我们生活中不可或缺的一部分。而QT,作为一款跨平台的C图形用户界面应用程序开发框架,凭借其强大的功能和灵活性,在众多软件开发工具中脱颖而出。我们深知,在软件开发领域&…...
田间机器人幼苗视觉检测与护苗施肥装置研究(大纲)
田间机器人幼苗视觉检测与护苗施肥装置研究 基于多光谱视觉与精准施肥的农业机器人系统设计 第一章 绪论 1.1 研究背景与意义 农业智能化需求: 传统幼苗检测依赖人工,效率低且易遗漏弱苗/病苗施肥不精准导致资源浪费和环境污染 技术挑战:…...
生物化学笔记:医学免疫学原理 免疫系统的组成与功能+克隆选择学说
免疫系统的组成与功能 克隆选择学说 克隆选择学说(Clonal Selection Theory)是免疫学的核心理论之一,由 麦克法兰伯内特(Frank Macfarlane Burnet) 在 1957 年提出,用于解释特异性免疫反应的机制。 基本概…...
Android 15 获取网络切片信息的标准接口
相关术语 简称全称中文说明URSPUE Route Selection Policy用户路由选择策略URSP 是 5G 核心网(PCF)下发给 UE 的策略,用于指导应用流量如何路由到不同的网络切片或 PDU 会话。其包含多个规则,每条规则由 优先级、业务描述符(Traffic Descriptor) 和 路由选择描述符(Rout…...
MySql创建分区表并且按月分区
前言 在mysql中,按月份分区,再使用分区字段时间来查询数据将会很快,因为这样只需要扫描指定的分区。因此,在处理大量数据时,使用分区表是一个非常好的选择。 1、创建表,并使用RANGE COLUMNS分区 按创建时间…...
招聘面试季--一文顿悟,Java中字节流和字符流的区别及使用场景上的差异
一、核心区别 特性字节流字符流数据单位以字节(8-bit)为单位处理数据(如0xA1)以字符(16-bit Unicode)为单位处理数据(如A, 你)基类InputStream / OutputSt…...
