攻城狮在路上(肆)How tomcat works(二) 一个简单的servlet容器
该节在上一节的基础上增加了所谓对静态资源和动态资源访问的不同控制流程。示例里面采用的是对路径“/servlet/”进行了特殊处理。
一、 主要还是从HttpServer1中的main方法开始,先解析出Request和Response对象,然后如果请求路径中包含/servlet/路径的话, 就进入ServletProcesser1进行处理,否则就进入StaticProcessor进行处理。
在ServletProcessor1中,对Request和Response进行了封装,通过URLClassLoader方法通过反射的方式生成对应的示例,执行其service方法即可。
由于类型中使用了反射的方式+强制类型转换,所以需要自己提供一个实现了javax.net.Servlet接口的类。
这样就基本实现了静态资源请求和动态资源请求的不同分发机制。
二、然后基于安全方面的考虑,又提供了一个HttpServer2,然后通过RequestFacade对Request进行了封装,用ResponseFacade对Response进行了封装,在其内部以私有变量的形式存在。
HttpServer2中增加的额外逻辑是隐藏了Request和Response对象的部分接口,使用户只能调用限定的方法。