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.mzph.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题解代码 优美的排列题解代码 二、子集问题字母大小写全排列题解代码 找出所有子集的异或总和再求和题解代码 三、组合问题电话号码的字母组合题解代码 括号生成题解代码 组合题解代码 目标和题解代码 组合总和题解代码 总结 一、排列问题 全排列…