Servlet注解底层模拟
  TEZNKK3IfmPf 2023年11月12日 15 0

        我们知道在web开发中配置Servlet有2种方式,一种是xml,另外一种是注解开发,前面我们已经使用java读取过xml文件,xml配置方式的原理比较清晰了,但是注解一直比较模糊,下面我们就使用java程序来读取Servlet的注解,然后输出注解配置的相关信息。

        我们首先创建一个简单的Servlet,使用注解进行配置。代码如下

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet(urlPatterns = {"/ok1","/ok2"})
public class OkServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("注解get");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("注解post");
    }
}

        这个Servlet配置了个url,分别是“/ok1”和“/ok2”,我们首先简单说一下Servlet注解配置的流程,tomcat在运行时会扫描所有包里面的类,看是否有注解配置,是不是应该Servlet,并且根据注解来进行不同操作。下面我们就使用程序来模拟tomcat扫描包并读取注解的过程。代码如下

import javax.servlet.annotation.WebServlet;
import java.util.HashMap;

public class TestAnnotationServlet {

    private final static HashMap<String, Object> HASH_MAP = new HashMap<>();

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //首先得到扫描包 路径,进而得到类的全路径
        String classAllPath = "com.clucky.servlet.annotation.OkServlet";
        //通过反射得到类的实例对象
        Class<?> aClass = Class.forName(classAllPath);
        //得到注解
        WebServlet annotation = aClass.getAnnotation(WebServlet.class);
        String[] urlPatterns = annotation.urlPatterns();
        //输出配置的url
        for (String urlPattern : urlPatterns) {
            System.out.println("urlPattern = " + urlPattern);
        }
        //如果匹配urlPattern 如果是第一次,tomcat就会创建一个该实列,放入hashmap,
        if (!HASH_MAP.containsKey("okServlet")) {
            Object newInstance = aClass.newInstance();
            HASH_MAP.put("okServlet", newInstance);
        }

    }
}

        我们运行这个测试,发现输出了我们OkServlet配置的url

Servlet注解底层模拟


         tomcat注解配置的原理大概就是这样,运行时扫描包,然后得到每个类的注解,根据注解来进行不同的操作,使用注解简化了开发,使得我们不再依赖于web.xml文件进行配置

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月26日   27   0   0 xml
  TEZNKK3IfmPf   2024年03月29日   28   0   0 xmljava
  TEZNKK3IfmPf   17天前   29   0   0 ajaxxml
  TEZNKK3IfmPf   2024年04月19日   34   0   0 xmlphp
TEZNKK3IfmPf