浅析Tomcat结构以及自定义嵌入式Tomcat

浅析Tomcat结构以及自定义嵌入式Tomcat

TOMCAT结构

	<Server port="8005" shutdown="SHUTDOWN">
	 
	  <Service name="Catalina">
	
	    <Connector port="8080" protocol="HTTP/1.1"
	               connectionTimeout="20000"
	               redirectPort="8443" URIEncoding="UTF-8"/>
	
	    <Engine name="Catalina" defaultHost="localhost">
	
	      <Host name="localhost"  appBase="webapps"
	            unpackWARs="true" autoDeploy="true">
	         <Context path="" docBase="WORKDIR" reloadable="true"/>
	      </Host>
		  
	    </Engine>
	    
	  </Service> 
	  
	</Server>

1.maven引入所依赖的jar包

 <!--tomcat 嵌入式包-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>10.0.2</version>
        </dependency>

2.根据Tomcat 加载XML格式,创建Tomcat启动类

public class HttpTomcat {
    
    
  
    public  void start(String hostname,Integer port){
    
    

        //1.创建Tomcat
        Tomcat tomcat=new Tomcat();

        //2.获取server
        Server server = tomcat.getServer();

        //3.发现service
        Service service = server.findService("Tomcat");

        //4.新建连接
        Connector connector = new Connector();
        //设置端口号
        connector.setPort(port);
        //设置编码
        connector.setURIEncoding("UTF-8");

        //5.新建引擎
        Engine engine = new StandardEngine();
        //设置默认host
        engine.setDefaultHost(hostname);

        //6.新建主机
        Host host = new StandardHost();
        host.setName(hostname);

        //7.新建上下文
        String contextPath="";
        Context context=new StandardContext();

        //8.逐层将数据放入
        context.setPath(contextPath);
        context.addLifecycleListener(new Tomcat.FixContextListener());

        host.addChild(context);
        engine.addChild(host);

        service.setContainer(engine);
        service.addConnector(connector);

        //9.前端分发器
        tomcat.addServlet(contextPath,"dispatcher",new DispatcherServlet());
        context.addServletMappingDecoded("/*","dispatcher");

        try {
    
    
            tomcat.start();
            tomcat.getServer().await();
        } catch (LifecycleException e) {
    
    
            e.printStackTrace();
        }

    }
}

3.继承HttpSevlet,自定义前端分发器,实现get,post方法

public class DispatcherServlet  extends HttpServlet {
    
    

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        super.doGet(req, resp);
        System.out.println("get");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        super.doPost(req, resp);
        System.out.println("post");
    }
}

4.使用main方法启动

public class ProviderApplication {
    
    
    public static void main(String[] args) {
    
    
        //启动tomcat
        HttpTomcat tomcat=new HttpTomcat();
        tomcat.start("localhost",9000);
    }
}

5.控制台打印结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013478983/article/details/114011260