对于Servlet的抽取之Servlet的结构体系
前言:讲servlet结构体系是为了说对于Servlet方法的抽取:对于没有学框架的可以尝试对Servlet的抽取,我对于一个servlet一个方法有着很大的头疼病~我们可以尝试分一分类,将一系列的方法封装在一个servlet里面,并利用多态,反射将对应的方法调用,其实很类似Spring MVC中核心类DispatcherServlet的功能(肯定是不一样的,但是实现思路可以借鉴)
首先我们要抽取servlet方法先了解servlet的结构体系
Servlet(interface)->GenericServlet(抽象类)->HttpServlet
对应的各个类里面怎样实现的,这个可以去看看源码,并不是很难
-
①GenericServlet是一个抽象类他把初始化(init())销毁(destroy())等这些方法做空,并把服务service方法做成抽象方法。(如图为GenericServlet的底层源码)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201225174102755.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNTczNjY3,size_16,color_FFFFFF,t_70)
- ②HttpServlet这个源码大概主要是既重写了service()方法并且重载了一个service私有方法,通过请求HttpServletRequest (简称req) req,getMethod()得到请求方式(有七种,最常用的就是get请求post请求)然后再去调用对应的doget(),dopost()方法等(如图为HttpServlet底层源码)
我们创建一个完整的servlet只需要重写deget(),dopost()方法就可以了
并在web.xml中配置servle
大概就是映射一个虚拟名,然后tomcat通过全类名()反射机制找到你的类然后执行-这就是servlet的生命周期的问题了,执行哪不执行哪我会单独写一份,姑且先认为是执行service方法(对于init初始化执行可以在web.xml里面配置)
如果我们servlet是3.0以上的我们完全可以偷懒,通过注解annotation(后期会补上注解,泛型)
通过配置@WebServlet("/demo")
根配置文件web,xml的作用相同(必须是servlet3.0以上的才可以)
- 下节我们来写对于servlet的方法的封装-类似SpringMVC中的DispatcherServlet思想(并不是相同,只是借鉴他的一个小思想)