本章学习了一个简单的Servlet容器,简述包含以下几个类及其作用:
1、Server类
该类用来启动一个ServerSocket用来监听来自于客户端的请求。
2、Request类
该类设置socket.inputStream()作为自己的私有变量,按照http协议解析来自客户端的请求。包括获取请求方法,请求的uri等方法。
3、Response类
该类将Request对象和socket.outputStream()作为自己的成员,可以接处理自request的静态请求,并将返回的内容输出。
4、Servlet类
该类继承与Servlet接口,用来处理实际的请求。实现了Servlet的init、service、destroy等接口。
下面重点来了,当接受到来自客户端的请求后,servlet容器是如何启动该servlet的。该章中讲解的比较简单,没有涉及到servlet的xml配置文件。
第一步:首先根据http的请求url,该url的格式做如下约定http://xxx/servlet/servlet-package,及servlet表示这是一个动态请求,要用到servlet来处理,servlet-package表示该servlet所在的包。
第二步:根据servlet的所在包,利用ClassLoader来加载该类的Class对象,然后利用Class对象的newInstance()方法,新建该类的实例。因为该Servlet类实现了Servlet接口,因此可以将该实例向上转型,作为Servlet接口类型。
第三步:调用Servlet接口的service()方法来处理实际的请求,即实际上调用了根据包名被加载的servlet(也就是实际处理该http请求的servlet)。至此,servlet容器成功调用了需要处理该请求的servlet对象。