编辑
2023-11-02
Tomcat源码学习
00
请注意,本文编写于 554 天前,最后修改于 554 天前,其中某些信息可能已经过时。

这段时间,学习了一下spring的使用,已经能整合mybitas,security,swagger封装一些redis工具还有一些常用的库去做CRUD了。从gin转到spring最大的感受就是,spring确实是一个大而全的巨无霸框架,几乎啥都有。mybitas-plus也很方便,可能初学的原因,感觉没有gin那么方便,有些许复杂,可能是配置文件这些?gin一般只需要写一个配置文件就差不多。但是spring的IOC注入,容器概念,确实很方便。那没有spring怎么写一个java web程序呢?

java也和go一样有官方的net库

java
import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer;

这里我们来引入库,然后看看怎么写一个简单的http服务

java
public static void main(String[] args) throws IOException { int port = 8000; // 设置服务器端口号 HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); // 创建路由处理器,处理根路径的请求 server.createContext("/", new MyHandler()); server.setExecutor(null); // 使用默认的线程池 server.start(); System.out.println("Server started on port " + port); }

也是很简洁的,对于createContext第二个参数,需要实现过HttpHandler接口

java
static class MyHandler implements HttpHandler { @Override public void handle(com.sun.net.httpserver.HttpExchange exchange) throws IOException { String response = "Hello, World!"; // 设置响应内容 exchange.sendResponseHeaders(200, response.length()); // 设置响应状态码和内容长度 OutputStream os = exchange.getResponseBody(); os.write(response.getBytes()); // 写入响应内容 os.close(); } }

这个接口只有一个Handler方法,重写即可。

这是一个简单的web程序。

后面java定义了servlet。servlet是java web应用的基础

本质上是一个普通的接口,但是这个接口是JVM定义的,统一的规范

java
package javax.servlet; import java.io.IOException; public interface Servlet { // 初始化方法 void init(ServletConfig var1) throws ServletException; // 包含一个ServletConfig ServletConfig getServletConfig(); // 运行方法 void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy(); }

下面是ServletConfig

java
public interface ServletConfig { String getServletName(); //的到对应的servlet的名字。 ServletContext getServletContext(); //得到servletContext String getInitParameter(String var1); Enumeration<String> getInitParameterNames(); }

ServletConfig配置就是如下的xml

xml
<servlet> <servlet-name>SimpleServletContainer</servlet-name> <servlet-class>com.example.SimpleServletContainer</servlet-class> </servlet> <servlet> <servlet-name>springMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

Servlet容器: 负责创建管理Servlet生命周期。还有接受web请求,然后封装创建ServletRequest 和 ServletResponse 对象,并把它作为参数传给指定的servlet的service方法。

参考:https://www.zhihu.com/question/495411426/answer/2196481247

https://blog.csdn.net/Mooneal/article/details/79702538

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!