tomcat底层机制/手动实现Servlet

前言

本部分参考韩老师的讲解,记录一下。

Maven

Maven 是一个项目管理工具,主要服务于基于 Java 平台的项目构建、依赖管理和项目信息管理。

Maven的意义

以前开发遇到的问题:

  1. 手动下载 jar
  2. 管理 jar 包之间的依赖关系(如:A.jar 需要 B.jar
  3. 项目结构混乱
  4. 构建过程复杂(编译、测试、打包、部署)

使用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- pom.xml 基本结构 -->
<project>
<!-- 项目坐标 - 全球唯一标识 -->
<groupId>com.hspedu</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging> <!-- 打包方式:jar, war, pom -->

<!-- 依赖管理 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope> <!-- 作用域 -->
</dependency>
</dependencies>
</project>

Tomcat处理逻辑

tomcat1

主要是通过Socket网络套接字来做中间桥梁;

tomcat2

看一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Tomcat {
public static void main(String[] args) throws IOException {
System.out.println("Hello World");
ServerSocket serverSocket = new ServerSocket(8090);
System.out.println("====mySocket is listening on port 8090====");
while(!serverSocket.isClosed()){
Socket socket =serverSocket.accept();
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
String mes=null;
System.out.println("接收到浏览器的数据");
while((mes= bufferedReader.readLine())!=null){
if(mes.length()==0){
break;
}
System.out.println(mes);
}
OutputStream outputStream = socket.getOutputStream();
String respHeader = "HTTP/1.1 200 OK\r\n" +
"Content-Type: text/html;charset=utf-8\r\n\r\n";
String resp = respHeader + "hello world";
System.out.println("========我们的 tomcat 给浏览器会送的数据 ======");
System.out.println(resp);
outputStream.write(resp.getBytes()); // 将 resp 字符串以 byte[] 方式返回
outputStream.flush();
outputStream.close();
inputStream.close();
}
}
}