awesome dispatcher servlet

概述

web应用一般都运行于web容器中,比如Tomcat服务器,Spring MVC框架定义了一个ServletDispatcherServlet
传统的做法就是在web.xml配置文件中将该Servlet配置到Servlet容器中,并拦截所有的请求/或者/*

我自定义了一个Servlet,拦截所有的请求,它继承HttpServlet,重写了父类GenericServletinit(),做一些初始化的工作;重写了HttpServletservice(),完成请求的分发,功能类似Spring MVCDispatcherServlet,但是没有它那么强大。项目地址在这里

  • 初始化并缓存所有处理器
  • 拦截所有请求
  • 静态资源特殊处理
  • 请求分发

初始化并缓存所有处理器

通过Servletinit()初始化项目中所有的控制器类,并把它们缓存在一个Map中,keyURIvalue是封装了处理该URI的处理器类、方法等信息。

拦截所有请求

在自定义的DispatcherServlet类上使用Servlet 3.0@WebServlet注解,并指定urlPatterns属性,值为/或者/*,多说一句,查阅资料发现,//*其实表示的意思是一样的,都表示任意的URLServleturlPattern不是简单的通配符,也不是正则表达式,而是具有自己的匹配规则。

静态资源特殊处理

判断请求是否为静态资源,项目中直接判断URI是否为/,如果是,将返回根目录下的index.html文件

请求分发

根据请求的URI,在处理器缓存中查找对应的处理器,如果找不到,则返回404,如果找到了,就利用反射机制,让处理器类的实例来处理请求,最后将结果使用fastjson做序列化并响应请求。

参考链接