如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!

沙海 2021年8月28日08:28:13Java评论28字数 3509阅读11分41秒阅读模式
摘要

智能摘要

智能摘要文章源自JAVA秀-https://www.javaxiu.com/42815.html

我们是可以使用Java提供内置Tomcat容器框架,使用Java语言操作Tomcat容器。这样我们也能创建一个maven项目,并且内置一个tomcat容器了。文章源自JAVA秀-https://www.javaxiu.com/42815.html

原文约 1648 | 图片 18 | 建议阅读 4 分钟 | 评价反馈文章源自JAVA秀-https://www.javaxiu.com/42815.html

如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!

点击关注 ? Java面试那些事儿 文章源自JAVA秀-https://www.javaxiu.com/42815.html

收录于话题#Java面试那些事儿,359个文章源自JAVA秀-https://www.javaxiu.com/42815.html

大家好,我是D哥点击关注下方公众号,Java面试资料 都在这里

文章源自JAVA秀-https://www.javaxiu.com/42815.html

来源:https://blog.csdn.net/m0_37892044/article/details/107963187文章源自JAVA秀-https://www.javaxiu.com/42815.html

当我们开始接触到SpringBoot项目的时候,我们特别惊讶,为什么没有了tomcat服务器,web项目还能跑起来。文章源自JAVA秀-https://www.javaxiu.com/42815.html

为什么只用了一个main方法就能讲一个web项目跑起来。学习了这篇文章你就能明白了。文章源自JAVA秀-https://www.javaxiu.com/42815.html

文章源自JAVA秀-https://www.javaxiu.com/42815.html

# 发现内置Tomcat文章源自JAVA秀-https://www.javaxiu.com/42815.html

打开一个SpringBoot项目,我们发现,有tomcat的依赖文章源自JAVA秀-https://www.javaxiu.com/42815.html

如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

接下来让我们把tomcat的依赖找到文章源自JAVA秀-https://www.javaxiu.com/42815.html

首先找到spring-boot-starter-web文章源自JAVA秀-https://www.javaxiu.com/42815.html

如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

点进去之后我们看到他用的是2.1.0版本,我们继续点击去文章源自JAVA秀-https://www.javaxiu.com/42815.html

如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

果然在里面找到tomcat的依赖,我们继续点进去文章源自JAVA秀-https://www.javaxiu.com/42815.html

如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

这是我们我们就能看到tomcat的相关依赖了。文章源自JAVA秀-https://www.javaxiu.com/42815.html

如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

因此我们是可以使用Java提供内置Tomcat容器框架,使用Java语言操作Tomcat容器。这样我们也能创建一个maven项目,并且内置一个tomcat容器了。文章源自JAVA秀-https://www.javaxiu.com/42815.html

创建一个maven项目文章源自JAVA秀-https://www.javaxiu.com/42815.html

这个不在做过多介绍文章源自JAVA秀-https://www.javaxiu.com/42815.html

文章源自JAVA秀-https://www.javaxiu.com/42815.html

添加tomcat依赖文章源自JAVA秀-https://www.javaxiu.com/42815.html

 文章源自JAVA秀-https://www.javaxiu.com/42815.html

这里我们使用8.5版本的tomcat文章源自JAVA秀-https://www.javaxiu.com/42815.html

    <!--Java语言操作tomcat --><dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>8.5.16</version></dependency>
    文章源自JAVA秀-https://www.javaxiu.com/42815.html

    # 创建一个servlet:IndexServlet文章源自JAVA秀-https://www.javaxiu.com/42815.html

      public class IndexServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("IndexServletIndexServletIndexServletIndexServletIndexServletIndexServlet"); }}
      文章源自JAVA秀-https://www.javaxiu.com/42815.html

      我们先看看传统的Servlet需要怎么配置,我们需要在WEB-INF目录下的web.xml文件中,配置sevlet的映射文章源自JAVA秀-https://www.javaxiu.com/42815.html

      如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

      当我们访问这个servlet的时候,访问地址应该是:ip:<端口>/<tomcat上下文>/index文章源自JAVA秀-https://www.javaxiu.com/42815.html

      但是,但是,但是tomcat和web.xml没了,怎么配置?简单,没有我们就用main方法来创建一个tomcat。文章源自JAVA秀-https://www.javaxiu.com/42815.html

      创建一个tomcat文章源自JAVA秀-https://www.javaxiu.com/42815.html

      定义servlet配置参数文章源自JAVA秀-https://www.javaxiu.com/42815.html

      我们先定义几个servlet的配置参数:servlet的名字,servlet的映射文章源自JAVA秀-https://www.javaxiu.com/42815.html

      如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

      内置Tomcat常用API介绍文章源自JAVA秀-https://www.javaxiu.com/42815.html

        org.apache.catalina.startup.Tomcat
        文章源自JAVA秀-https://www.javaxiu.com/42815.html

        创建tomcat文章源自JAVA秀-https://www.javaxiu.com/42815.html

          Tomcat tomcatServer = new Tomcat();
          文章源自JAVA秀-https://www.javaxiu.com/42815.html

          设置tomcat端口文章源自JAVA秀-https://www.javaxiu.com/42815.html

            void setPort(int port);
            文章源自JAVA秀-https://www.javaxiu.com/42815.html

            设置上下文地址文章源自JAVA秀-https://www.javaxiu.com/42815.html

              void setPath(String path)
              文章源自JAVA秀-https://www.javaxiu.com/42815.html

              添加监听文章源自JAVA秀-https://www.javaxiu.com/42815.html

                void addLifecycleListener(LifecycleListener listener)
                文章源自JAVA秀-https://www.javaxiu.com/42815.html

                添加sevlet文章源自JAVA秀-https://www.javaxiu.com/42815.html

                  Wrapper addServlet(String contextPath,String servletName,Servlet servlet)
                  文章源自JAVA秀-https://www.javaxiu.com/42815.html

                  添加sevlet映射文章源自JAVA秀-https://www.javaxiu.com/42815.html

                    void addServletMappingDecoded(String pattern, String name)
                    文章源自JAVA秀-https://www.javaxiu.com/42815.html

                    文章源自JAVA秀-https://www.javaxiu.com/42815.html

                    启动tomcat文章源自JAVA秀-https://www.javaxiu.com/42815.html

                      void start() throws LifecycleException
                      文章源自JAVA秀-https://www.javaxiu.com/42815.html

                      文章源自JAVA秀-https://www.javaxiu.com/42815.html

                      获取服务文章源自JAVA秀-https://www.javaxiu.com/42815.html

                        Server getServer()
                        文章源自JAVA秀-https://www.javaxiu.com/42815.html

                        服务异步文章源自JAVA秀-https://www.javaxiu.com/42815.html

                          tomcatServer.getServer().await()
                          文章源自JAVA秀-https://www.javaxiu.com/42815.html

                          将Web应用程序添加到Tomcat的webapps目录中,等效的默认web.xml将应用于该Web应用程序,并且与该应用程序打包的任何WEB-INF/web.xml和META-INF/context.xml都将被正常处理。文章源自JAVA秀-https://www.javaxiu.com/42815.html

                            Context addWebapp(String contextPath, String docBase) throws ServletExceptionweb应用资源添加到此Web应用程序
                            文章源自JAVA秀-https://www.javaxiu.com/42815.html

                            void addPreResources(WebResourceSet webResourceSet)
                            文章源自JAVA秀-https://www.javaxiu.com/42815.html

                            创建tomcat并且添加servlet文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              public class TestTomcat { private static int PORT = 8080; private static String CONTEX_PATH = "/demosevlet"; private static String SERVLET_NAME = "index"; private static String MAPPING = "index"; public static void main(String[] args) throws LifecycleException, InterruptedException { System.out.println("开始启动tomcat"); Tomcat tomcatServer = new Tomcat(); //设置tomcat端口 tomcatServer.setPort(PORT); //此tomcat端口是否自动部署 tomcatServer.getHost().setAutoDeploy(false); //创建一个web应用程序 StandardContext standardContex = new StandardContext(); //设置web应用程序的上下文地址 standardContex.setPath(CONTEX_PATH); //添加web应用程序的监听 standardContex.addLifecycleListener(new FixContextListener()); //将web应用程序添加到服务器中 tomcatServer.getHost().addChild(standardContex); //配置servelt和映射 tomcatServer.addServlet(CONTEX_PATH, SERVLET_NAME, new IndexServlet()); standardContex.addServletMappingDecoded("/"+MAPPING, SERVLET_NAME); //启动tomcat tomcatServer.start(); System.out.println("启动tomcat完毕"); //开启异步服务,接收请求 tomcatServer.getServer().await(); }}
                              文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              启动main方法创建tomcat文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              启动结果如下,我们看到tomcat以8080端口启动。文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              并且在此目录下生成了tomcat.8080文件夹文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              访问IndexServlet文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              请求地址:ip:<端口>/<tomcat上下文>/index文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              请求地址:127.0.0.1:8080/demosevlet/index文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              技术交流群最后,D哥也建了一个技术群,主要探讨一些新的技术和开源项目值不值得去研究及IDEA使用的“骚操作”,有兴趣入群的同学,可长按扫描下方二维码,一定要备注:城市+昵称+技术方向,根据格式备注,可更快被通过且邀请进群。▲长按扫描
                              文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              如何用 Java 写一个自己的 Tomcat 容器,涨姿势了!热门推荐:文章源自JAVA秀-https://www.javaxiu.com/42815.html

                              “要源码上门自取”,结果人真上门了!网友炸了!一款用Spring Boot + Bootstrap写的迷你天猫商城,附源码!真实案例:一个由Zookeeper引发的全链路服务雪崩,要哭了。。。
                              文章源自JAVA秀-https://www.javaxiu.com/42815.html
                              继续阅读
                              速蛙云 - 极致体验,强烈推荐!!!购买套餐就免费送各大视频网站会员!快速稳定、独家福利社、流媒体稳定解锁!速度快,全球上网、视频、游戏加速、独立IP均支持!基础套餐性价比很高!这里不多说,我一直正在使用,推荐购买:https://www.javaxiu.com/59919.html
                              weinxin
                              资源分享QQ群
                              本站是JAVA秀团队的技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
                              沙海
                              匿名

                              发表评论

                              匿名网友 填写信息

                              :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

                              确定