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.rhkb.cn/news/37452.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx 反向代理 ubuntu

关键字 Nginx&#xff0c;正向代理&#xff0c;方向代理&#xff0c;博客建站 背景环境 我在搭建个人博客的过程中遇到一个问题&#xff0c;我的博客服务的端口是1313&#xff0c;我的域名是qinyangx.top。我希望能够通过qinyangx.top直接访问到服务器上1313端口的博客服务。…

学习threejs,使用TextGeometry文本几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.TextGeometry1.1.1 ☘…

【秣厉科技】LabVIEW工具包——OpenCV 教程(12):机器学习

文章目录 前言机器学习例1&#xff1a;支持向量机&#xff08;SVM&#xff09;做平面向量二分类例2&#xff1a; K邻近算法&#xff08;KNearest&#xff09;实现分类 总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Wind…

企业级AI架构探索:业务驱动,场景优先

企业级AI架构的设计需要兼顾技术先进性、业务适配性、成本效益和长期可维护性。以下从架构设计原则、核心架构层次、基础框架可能性、实施路径四个维度进行系统性阐述&#xff1a; 一、设计原则 业务驱动&#xff0c;场景优先 明确AI解决的业务痛点&#xff08;如降本增效、智…

DCDC36V同步降压 输出可调 2A电流恒压芯片SL1588H 替换LV3842

在当今电子设备飞速发展的时代&#xff0c;电源管理芯片的性能优劣直接关乎设备的稳定性与高效运行。对于诸多需要将 36V 电压进行同步降压、输出电压可调且稳定输出 2A 电流的应用场景&#xff0c;一款卓越的恒压芯片不可或缺。SL1588H 正凭借其领先的技术和出色的性能&#x…

Beans模块之工厂模块注解模块@Qualifier

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

flutter 开发web端的性能优化

参考资料 Flutter for Web 首次首屏优化 ——JS 分片优化_main.dart.js-CSDN博客文章浏览阅读1.4k次。本文介绍了如何通过延迟加载组件和js分片优化Flutter for Web应用的加载速度。在实践中&#xff0c;通过按需加载减少js文件大小&#xff0c;使用并行加载提升加载效率。通过…

【设计模式】三十二、策略模式

系列文章|源码 https://github.com/tyronczt/design-mode-learn 文章目录 系列文章|源码一、模式定义与核心思想二、模式结构与Java实现1. 核心角色2. Java代码示例 三、策略模式的五大核心优势四、适用场景五、与其他模式的对比六、最佳实践建议总结 &#x1f680;进阶版【更…

【Linux 维测专栏 1 -- Hung Task 分析与验证】

文章目录 Linux Hung Task 简介1. Hung Task 概述2. D 状态与 Hung Task3. Hung Task 的工作原理4. Hung Task 的配置5. Hung Task 的典型输出6. Hung Task 的应用场景7. kernel 配置7.1 编译选项7.2 参数控制7.3 验证方法4. 扩展接口 8. 注意事项 Linux Hung Task 简介 1. Hu…

计算机网络精讲day1——计算机网络的性能指标(上)

性能指标1&#xff1a;速率 概念1&#xff1a;比特 英文全称是binary digit&#xff0c;意思是一个二进制数字&#xff0c;因此一个比特就是二进制数字中的1或0&#xff0c;比特也是信息论中使用的信息量单位。 概念2&#xff1a;速率 网络中的速率指的是数据的传送速率&#…

ubuntu20.04使用matlab2024a快捷键调整

一、概述 因为最近在使用ubuntu系统&#xff0c;在上面安装一个matlab比较方便&#xff0c;不用来回在window上面进行跳转&#xff0c;节省不少时间&#xff0c;同时在ubuntu下面启动matlab速度也比较快。 二、问题解决 &#xff08;一&#xff09;问题概述 问题如下&#xf…

【设计模式】装饰模式

六、装饰模式 装饰(Decorator) 模式也称为装饰器模式/包装模式&#xff0c;是一种结构型模式。这是一个非常有趣和值得学习的设计模式&#xff0c;该模式展现出了运行时的一种扩展能力&#xff0c;以及比继承更强大和灵活的设计视角和设计能力&#xff0c;甚至在有些场合下&am…

科技赋能安全:慧通测控的安全带全静态性能测试

汽车的广泛普及给人们的出行带来了极大便利&#xff0c;但交通事故频发也成为严重的社会问题。据世界卫生组织统计&#xff0c;全球每年约有 135 万人死于道路交通事故&#xff0c;而安全带在减少事故伤亡方面起着不可替代的作用。正确使用安全带可使前排驾乘人员的死亡风险降低…

猿大师中间件:如何在最新Chrome浏览器Web网页内嵌本地OCX控件?

OCX控件是ActiveX控件的一种&#xff0c;主要用于在网页中嵌入复杂的功能&#xff0c;如图形渲染、多媒体播放等&#xff0c;可是随着谷歌Chrome等主流浏览器升级&#xff0c;目前已经不支持微软调用ActiveX控件了&#xff0c;如果想调用OCX控件用IE浏览器或者国产双擎浏览器&a…

基于STC89C52的DS1621温度检测系统

摘要 本文设计了一种基于STC89C52单片机的DS1621温度检测系统&#xff0c;通过DS1621传感器采集温度数据&#xff0c;利用STC89C52单片机处理数据&#xff0c;并通过串口将温度信息发送至电脑显示。借助Proteus软件进行仿真验证&#xff0c;实现了温度检测系统的功能演示。该系…

创建自己的github.io

1、创建GitHub账号 GitHub地址&#xff1a;https://github.com/ 点击Sign up创建账号 如果已创建&#xff0c;点击Sign in登录 2、创建仓库 假设Owner为username&#xff0c;则Repository name为username.github.io说明&#xff1a; 1、Owner为用户名 2、Repository name为仓…

AI Agent中的MCP详解

一、协议定义与核心价值 MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年11月推出的开放标准协议,其核心目标是通过建立统一接口规范,解决AI模型与外部系统集成效率低下的行业痛点。该协议通过标准化通信机制,使大型语言模型(LLM)能够无缝对接数…

【AI论文】DeepMesh:基于强化学习的自回归艺术家网格创建

摘要&#xff1a;三角形网格在3D应用中扮演着至关重要的角色&#xff0c;能够实现高效的操作和渲染。虽然自回归方法通过预测离散的顶点标记来生成结构化的网格&#xff0c;但它们往往受到面数限制和网格不完整性的约束。为了应对这些挑战&#xff0c;我们提出了DeepMesh框架&a…

基于ArcGIS和ETOPO-2022 DEM数据分层绘制全球海陆分布

第〇部分 前言 一幅带有地理空间参考、且包含海陆分布的DEM图像在研究区的绘制中非常常见&#xff0c;本文将实现以下图像的绘制 关键步骤&#xff1a; &#xff08;1&#xff09;NOAA-NCEI官方下载最新的ETOPO-2022 DEM数据 &#xff08;2&#xff09;在ArcGIS&#xff08;…

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…