模拟SpringBoot内部内置Tomcat的实现过程:
- 项目初始化
我们使用IDEA构建一个简单的web项目,然后在Pom中加入我们需要的jar依赖,包括Tomact 的,它是我们手动创建Tomcat的一个api
<!--Java 语言操作tomcat -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.28</version>
</dependency>
- 写一个简单的Servlet
package com.ggr.tomcat.test;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 这是一个测试的Serlet
*/
public class IndexServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello! I am ggr this is my new friend");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
}
- 在Main函数入口出创建Tomcat并注册这个Servlet然后启动
package com.ggr.tomcat.test;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
/**
* 使用Java语言创建Tomcat服务器<br>
* Tomcat 底层执行程序 最终servlet<br>
* SpringMVC底层使用servlet 包装<br>
*/
public class Test001 {
private static int PORT = 8080;
private static String CONTEXT_PATH="/tomcat";
private static String SERVLET_NAME = "indexServlet";
public static void main(String[] args) throws LifecycleException {
//创建tomcat服务器
Tomcat tomcatServer = new Tomcat();
//设置端口号
tomcatServer.setPort(PORT);
//是否自动部署
tomcatServer.getHost().setAutoDeploy(false);
//创建上下文
StandardContext standardContext = new StandardContext();
standardContext.setPath(CONTEXT_PATH);
standardContext.addLifecycleListener(new Tomcat.FixContextListener());
//将上下文加入到tomcat中去
tomcatServer.getHost().addChild(standardContext);
//创建Servlet
tomcatServer.addServlet(CONTEXT_PATH,SERVLET_NAME,new IndexServlet());
// servleturl映射
standardContext.addServletMappingDecoded("/index", SERVLET_NAME);
tomcatServer.start();
System.out.println("tomcat服务器启动成功..");
//异步接收请求
tomcatServer.getServer().await();
}
}
点击启动我们就可以看到我们创建的一个内置的Tomcat并且可以通过localhost:8080/index 访问我们定义好的Servelet
这里之所以记录下来这个过程主要是为了说明,SpringBoot的底层实际上也是封装了这些子模块实现的,Controller的本质上还是一个Servlet,Spring框架为我们提供了更加灵活简单的配置和使用方式。
网友评论