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

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

  • 前言
  • 一、注解的基本概念
  • [二、@Override 注解](#二、@Override 注解)
      • [2.1 作用与优势](#2.1 作用与优势)
      • [2.2 示例代码](#2.2 示例代码)
  • [三、@Target 注解](#三、@Target 注解)
      • [3.1 定义与用途](#3.1 定义与用途)
      • [3.2 示例代码](#3.2 示例代码)
  • [四、@WebServlet 注解](#四、@WebServlet 注解)
      • [4.1 作用](#4.1 作用)
      • [4.2 示例代码](#4.2 示例代码)
  • 五、反射与注解
      • [5.1 反射的概念](#5.1 反射的概念)
      • [5.2 注解与反射的结合使用](#5.2 注解与反射的结合使用)
  • [六、为什么选择 Servlet 注解](#六、为什么选择 Servlet 注解)
  • [七、其他常见的 Servlet 注解及使用方法](#七、其他常见的 Servlet 注解及使用方法)
      • [7.1 `@WebFilter` 注解](#7.1 @WebFilter 注解)
      • [7.2 `@WebListener` 注解](#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 中的使用示例:

java 复制代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    // 业务逻辑
}

详细代码如下:

java 复制代码
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 {
    @Override
    protected 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 注解用于指定一个注解可以应用到哪些元素上。其定义如下:

java 复制代码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    ElementType[] value();
}

ElementType 是一个枚举类型,定义了可以应用注解的元素类型,常见的有:

元素类型 说明
TYPE 应用于类、接口(包括注解类型)和枚举类型。
FIELD 应用于字段(包括枚举常量)。
METHOD 应用于方法。
PARAMETER 应用于方法的参数。
CONSTRUCTOR 应用于构造函数。
LOCAL_VARIABLE 应用于局部变量。

3.2 示例代码

以下是自定义注解并使用 @Target 注解限制其应用范围的示例:

java 复制代码
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 示例代码

java 复制代码
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 {
    @Override
    protected 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 注解与反射的结合使用

注解与反射结合,可以在运行时动态地处理注解信息。例如,通过反射获取一个类中被特定注解标记的方法,并执行这些方法:

java 复制代码
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 注解用于将一个类声明为过滤器,它可以指定过滤器的过滤路径、初始化参数等。

java 复制代码
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 {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化过滤器
    }

    @Override
    public 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");
    }

    @Override
    public void destroy() {
        // 销毁过滤器
    }
}

7.2 @WebListener 注解

@WebListener 注解用于将一个类声明为监听器,它可以监听 Servlet 上下文、会话、请求等事件。

java 复制代码
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class MySessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session created: " + se.getSession().getId());
    }

    @Override
    public 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

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

相关推荐
qq_366086229 分钟前
hashMap一些不太常用但非常有用的方法及使用示例
java·开发语言
刚入门的大一新生11 分钟前
C++初阶-string类4
开发语言·c++
满怀101516 分钟前
【Python】os模块
开发语言·python
A~taoker18 分钟前
认识tomcat(了解)
java·tomcat
ABCDEEE719 分钟前
民宿管理系统6
java
天黑请闭眼22 分钟前
ShardingSphere:使用information_schema查询时报错:Table ‘数据库名称.tables‘ doesn‘t exist
java
请来次降维打击!!!29 分钟前
优选算法系列(8.多源BFS)
java·c++·算法·宽度优先
TextIn智能文档云平台32 分钟前
TextIn ParseX重磅功能更新:支持切换公式输出形式、表格解析优化、新增电子档PDF去印章
java·图像处理·人工智能·算法·自然语言处理·pdf·ocr
胡耀超33 分钟前
对称加密算法(AES、ChaCha20和SM4)Python实现——密码学基础(Python出现No module named “Crypto” 解决方案)
开发语言·python·密码学·数据安全·aes·sm4·chacha
cocogogogo38 分钟前
配置Jupyter Notebook环境及Token认证(Linux服务器)
linux·服务器·jupyter