首先tomcat的原理是什么?
上面的图可以简化为:
这张图固然缺少了很多东西,但是却是tomcat实现功能的一个基本逻辑
简单的来说,就是用户发出一个请求,后台处理url,通过组合根地址,找到本地的资源地址,然后通过读取这个资源,将它的流输出到页面,这就是tomcat的简单原理
那如何实现呢?
简单的来说:Tomcat由三个基本类组成
- HttpServer
- Request
- Response
Request负责处理url
Response负责处理响应的信息
HttpServer负责阻塞IO,监听消息
既然职责已经分好了,那我们就用代码来实现这个简单的Tomcat吧
首先是HttpServer类:
public class HttpServer{
//检验是否运行
public boolean shutdown = false;
//阻塞接口的方法
public void acceptWait(){
SocketServer sever = null;
//配置server
try{
//配置服务器的端口,线程连接数,以及地址
server = new SocketServer(8080,1,"127.0.0.1");
}catch(Exception ex){
ex.printStack();
}
while(!shutdown){
try{
//创建socket对象
Socket socket = SocketServer.accept();
//获取流对象
InputStream input = socket.getInputStream();
OutputStream output = socket.getOutStream();
//根据输入流构建请求对象
Request request = new Request(input);
//解析对应的url
request.parse();
//根据对应的输入流构建响应对象
Response response = new Response(output);
//设置其本身的请求对象
response.setRequest(request);
//响应静态资源
response.sendStaticResource();