当前位置: 首页 > 后端技术 > Java

教你用Java写自己的Tomcat容器,搞定,.

时间:2023-04-01 23:41:42 Java

开始接触SpringBoot项目的时候,特别奇怪为什么没有tomcat服务器web项目还能运行。为什么一个web项目只用一个main方法就可以跑起来。看完这篇文章你就明白了。1.发现内置的Tomcat打开了一个SpringBoot项目,我们发现有tomcat的依赖。接下来,让我们找到tomcat的依赖。首先找到spring-boot-starter-web,点进去,我们看到它使用的是2.1.0版本后,我们继续点进去,在里面找到tomcat的依赖,继续点进去,这样就可以看到tomcat的相关依赖。因此,我们可以使用Java提供内置的Tomcat容器框架,使用Java语言来操作Tomcat容器。这样我们也可以创建一个maven项目,构建一个tomcat容器。2.稍微创建一个maven项目3.添加tomcat依赖这里我们使用8.5版本的tomcatorg.apache.tomcat.embedtomcat-embed-core8.5.164.创建一个servlet:IndexServletpublicclassIndexServletextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;@OverrideprotectedvoidquestdoGet(HttpServletreq,HttpServletResponseresp)throwsServletException,IOException{doPost(req,resp);}@OverrideprotectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{resp.getWriter().print("IndexServletIndexServletIndexServletIndexServletIndexServletIndexServlet");}}我们先来看看传统的Servlet需要怎么配置。我们需要在WEB-INF目录下的web.xml文件中配置sevlet映射。当我们访问这个servlet的时候,访问地址应该是:ip://index但是,但是,但是tomcat和web.xml都没有了,怎么配置呢?很简单,不用我们用main方法创建一个tomcat。5.创建一个tomcat5.1。定义servlet配置参数我们首先定义几个servlet配置参数:servlet名称,servlet映射5.2。内置Tomcat常用API介绍org.apache.catalina.startup.Tomcat创建tomcatTomcattomcatServer=newTomcat();设置tomcat端口voidsetPort(intport);设置上下文地址voidsetPath(Stringpath)添加监听器voidaddLifecycleListener(LifecycleListenerlistener)添加sevletWrapperaddServlet(StringcontextPath,StringservletName,Servletservlet)添加sevlet映射voidaddServletMappingDecoded(Stringpattern,Stringname)starttomcatvoidstart()throwsLifecycleExceptiongetserviceServergetServer()serviceasynchronoustomcatServer.getServer().await()添加web应用到Tomcat的webapps目录,等效的默认web.xml会被应用到web应用,任何WEB-INF/web.xml和与应用程序一起打包的META-INF/context.xml将被正常处理。ContextaddWebapp(StringcontextPath,StringdocBase)throwsServletException添加web应用资源到这个web应用voidaddPreResources(WebResourceSetwebResourceSet)5.3。创建tomcat并添加servletpublicclassTestTomcat{privatestaticintPORT=8080;privatestaticStringCONTEX_PATH="/demosevlet";私有静态字符串SERVLET_NAME=“索引”;私人静态字符串映射=“索引”;publicstaticvoidmain(String[]args)throwsLifecycleException,InterruptedException{System.out.println("starttomcat");TomcattomcatServer=newTomcat();//设置tomcat端口tomcatServer.setPort(PORT);//这个tomcat端口是否自动部署tomcatServer.getHost().setAutoDeploy(false);//创建一个Web应用程序StandardContextstandardContext=newStandardContext();//设置web应用的上下文地址standardContex.setPath(CONTEX_PATH);//添加web应用的监听standardContex.addLifecycleListener(newFixContextListener());//将Web应用程序添加到服务器tomcatServer.getHost().addChild(standardContex);//配置servlet并映射tomcatServer.addServlet(CONTEX_路径,SERVLET_NAME,新的IndexServlet());standardContex.addServletMappingDecoded("/"+MAPPING,SERVLET_NAME);//启动tomcattomcatServer.start();System.out.println("启动tomcat完成");//开启异步Service,接收请求tomcatServer.getServer().await();}}5.4。启动主要方法创建tomcat启动结果如下,我们看到tomcat以8080端口启动,在5.5这个目录下生成了一个tomcat.8080文件夹。访问IndexServlet请求地址:ip://index请求地址:127.0.0.1:8080/demosevlet/index