天天看点

深入剖析tomcat之一个简单的servlet容器

上一篇,我们讲解了如果开发一个简单的http服务器,这一篇,我们扩展一下,让我们的服务器具备servlet的解析功能。

简单介绍下servlet接口

如果我们想要自定义一个servlet,那么我们必须继承servlet,并且实现下面几个重要的方法

五个方法中,init,destroy,service都是和servlet的生命周期相关的方法。当实例化某个servlet类之后,servlet会调用init进行初始化,当servlet的请求到达之后,就会调用service方法,并将servletrequest和servletresponse对象作为参数传入,前者包含客户端的http请求的信息,后者包含服务器的响应信息。

这个简单的servlet容器的流程如下

等待http请求

对应的servletrequest对象和servletresponse对象,

判断请求的类型,如果是请求静态资源,则找到静态资源的文件,返回给客户端

如果是servlet请求,载入servlet类,调用service()方法,传入servletrequest对象和servletresponse对象

涉及到的主要的类

simpleservletcontainerserver

request

response

servlet

primitiveservlet

staticprocessor

servletprocessor

关于request和response的定义在上一篇幅有定义,这里我们稍微扩展了一下,碍于篇幅,不在这里展示。

primitiveservlet类,继承自servlet,servlet请求的处理类

类定义:

simpleservletcontainerserver 类

功能:程序入口,监听http请求,并且负责创建request和response

类定义

我们引入了staticprocessor和servletprocessor进行逻辑的处理,我们看下这两个类的定义

首先这两个类都继承自iprocessor接口

staticprocessor类主要是处理静态资源请求

serveletprocessor主要负责处理servlet请求,初始化的时候,初始化所有的servlet子类,接收到servlet的http请求之后,根据请求名称,调用对应的service函数。

结果

我们在eclipse里运行结果

深入剖析tomcat之一个简单的servlet容器
深入剖析tomcat之一个简单的servlet容器