从0到1实现一个web服务器 --- ### 实现https访问 1. 生成证书 1. 方式1:使用openssl生成证书 ```shell openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name myhttps -CAfile chain.pem -caname root ``` 2. 方式2:使用第三方工具证书(key和crt) ```shell # key 和 crt 转换成 PKCS12(.p12) openssl pkcs12 -export -in ssl.crt -inkey ssl.key -out keystore_3rd.p12 -name myhttps -CAfile ca.crt -caname root Enter Export Password: (123456) Verifying - Enter Export Password: (123456) ``` 2. 代码参照: [top.yexuejc.demo.core.WebServer](src/main/java/top/yexuejc/demo/core/WebServer.java).startHttps ### 扩展一个ctrl能正常处理请求 1. 定义[@RestController](src/main/java/top/yexuejc/demo/annotation/RestController.java)和[@GetMapping](src/main/java/top/yexuejc/demo/annotation/GetMapping.java)注解 2. 定义扫描器和模拟bean容器: [ControllerSupplier](src/main/java/top/yexuejc/demo/core/ControllerSupplier.java) 3. 接入处理逻辑: [RequestHandler](src/main/java/top/yexuejc/demo/core/RequestHandler.java) line 49 ```java Response response = ControllerSupplier.invoke(request); ``` 4. 程序入口装配: [WebServerApplication](src/main/java/top/yexuejc/demo/WebServerApplication.java) line 16 ```java ControllerSupplier.builder(WebServerApplication.class); ``` ### 启动参数配置 参照 [WebServerApplication](src/main/java/top/yexuejc/demo/WebServerApplication.java).argsProcess ### 配置文件读取 参照 [AppConfig](src/main/java/top/yexuejc/demo/AppConfig.java)