第一章
http请求
http响应
socket
一个httpservlet servetSockret main入口 有await方法 静态资源路径 里面调用request接收inputStream 和response 接受收outStream
request 里 parse方法解析http原始数据
parseUri方法解析出URI
getUri方法返回uri
response里 serRequest方法接收一个request对象
sendStaticResource方法发送一个静态资源到浏览器,把错误信息也发送过去
第二章
一个servlet 放到文件夹里面
Constants里放文件路径等常量
一个httpservlet1 servetSockret main入口 有await方法 里面调用request接收inputStream 和response 接受收outStream
await方法里 如果判断解析到的URI有/servlet则请求转发给ServletProcess1处理,否则给staticResourceProcesor处理
request 里 parse方法解析http原始数据
parseUri方法解析出URI
getUri方法返回uri
实现了SerlvetRequest接口 方法未覆盖
response里 serRequest方法接收一个request对象
sendStaticResource方法发送一个静态资源到浏览器,把错误信息也发送过去
getWriter方法 new一个printWriter
实现了SerlvetResponse接口 方法未覆盖
ServletProcess1 process方法调用getUri从Servlet获取URI 获得servletName 然后创建URI类加载器实例 需要目录等参数 (目录称为仓库) 通过servletName载人serlvet类
这里提到外观类 为了解决getUri和prase方法的安全 实现同样的接口 RequestFacade和ResponseFacade 然后httpServer1调用如果判断解析到的URI有/servlet则请求转发给ServletProcess2处理 只是包装了request和response
staticResourceProcesor 调用response的sendStaticResource方法
第三章
StringManager 类
单例模式,要在包 ex03.pyrmont.connector.http 的一个类中使用 StringManager,可以传递包名给 StringManager 类的 getManager 方法:StringManager sm =StringManager.getManager("ex03.pyrmont.connector.http");
从LocalStrings.properties写好对应的
key和value。
public String getString(String key)通过传递 httpConnector.alreadyInitialized 作为 getString 的参数,将会返回"HTTPconnector has already been initialized"。
1、startup 模块只有一个类,Bootstrap,用来启动应用的。--启动
HttpConnector
2、connector 模块的类可以分为五组:
连接器和它的支撑类(HttpConnector 和 HttpProcessor)。
HttpConnector 类实现了 java.lang.Runnable,所以它能被它自己的线程专用。当你启动应用程序,一个 HttpConnector 的实例被创建,并且它的 run 方法被执行。
HttpConnector -一个线程 不断连接HTTP 有协议 还有ServerSocket 调用HttpProcessor
HttpProcessor 类的 process 方法接受前来的 HTTP 请求的套接字,会做下面的事情:1. 创建一个 HttpRequest 对象。2. 创建一个 HttpResponse 对象。3. 解析 HTTP 请求的第一行和头部,并放到 HttpRequest 对象。4. 解 析 HttpRequest 和 HttpResponse 对 象 到 一 个 ServletProcessor 或 者StaticResourceProcessor。ServletProcessor 调用被请求的 servlet 的service 方 法,而 StaticResourceProcessor 发送一个静态资源的内容。
process 首先获得套接字的输入流和输出流,SocketInputStream
process 方法调用 HttpProcessor 类中的两个私有方法来解析请求。parseRequest(input, output);parseHeaders (input);
HttpProcessor 类使用 org.apache.catalina.util.StringManager 类来发送错误信息
指代 HTTP 请求的类(HttpRequest)和它的辅助类。
指代 HTTP 响应的类(HttpResponse)和它的辅助类。
1.setHeader 方法来发送头部到一个客户端
解析 HTTP 请求和填充 HttpRequest 类。
Facade 类(HttpRequestFacade 和 HttpResponseFacade)。
Constant 类
3、core 模块由两个类组成:ServletProcessor 和 StaticResourceProcessor。