欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Java-servlet(七)详细讲解Servlet注解

Java-servlet(七)详细讲解Servlet注解

2025/3/24 16:44:38 来源:https://blog.csdn.net/2402_83322742/article/details/146430111  浏览:    关键词: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

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词