上一篇,我们讲解了如果开发一个简单的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里运行结果
