抄写springboot源码--my-spring项目☞集成Tomcat,跑通spring mvc

 

目录:

  • 集成Tomcat
  • 跑通spring mvc

1. 集成Tomcat

pom增加Tomcat依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mp</groupId>
    <artifactId>my-spring</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <!-- 集成Tomcat服务-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>8.5.27</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
    </dependencies>


</project>
  • 在framework包下新建servlet服务类
  • package com.mp.framework.servlet;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    /**
     * ClassName: Servlet01
     * Function:  TODO
     * Date:      2020-05-07 10:01
     * author     mp
     * version    V1.0
     */
    public class Servlet01 implements Servlet {
        public void init(ServletConfig config) throws ServletException {
            System.out.println("servlet01 init ....");
        }
    
        public ServletConfig getServletConfig() {
            System.out.println("servlet01 config....");
            return null;
        }
    
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
            System.out.println("this is service method...");
            res.getWriter().write("servlet01......");
        }
    
        public String getServletInfo() {
            System.out.println("servlet01 getSevletInfo。。。。");
            return null;
        }
    
        public void destroy() {
            System.out.println("servlet01 destroy...");
    
        }
    }
    

    说明: 实现Servlet接口,并实现其service方法; 同理我们创建一个server02实现类

  •  在framework包下创建TomcatServer 服务
  • package com.mp.framework.web.server;
    
    import com.mp.framework.servlet.Servlet01;
    import com.mp.framework.servlet.Servlet02;
    import org.apache.catalina.Context;
    import org.apache.catalina.LifecycleException;
    import org.apache.catalina.core.StandardContext;
    import org.apache.catalina.startup.Tomcat;
    
    import javax.servlet.Servlet;
    
    /**
     * ClassName: TomcatServer
     * Function:  集成Tomcat服务器
     * Date:      2020-05-07 09:55
     * author     mp
     * version    V1.0
     */
    public class TomcatServer {
        private Tomcat tomcat;
        private String[] args;
    
        public TomcatServer(String[] args){
            this.args = args;
        }
    
        public void startServer() throws LifecycleException {
            // 实例化Tomcat
            tomcat = new Tomcat();
            tomcat.setPort(9999);
            tomcat.start();
    
            // 实例化context容器
            Context context = new StandardContext();
            context.setPath("");
            context.addLifecycleListener(new Tomcat.FixContextListener());
    
            Servlet servlet01 = new Servlet01();
            Tomcat.addServlet(context,"servlet01",servlet01).setAsyncSupported(true);
            Servlet servlet02 = new Servlet02();
            Tomcat.addServlet(context,"servlet02",servlet02).setAsyncSupported(true);
    
            // 添加url映射
            context.addServletMappingDecoded("/s01/*","servlet01");
            context.addServletMappingDecoded("/s02/*","servlet02");
            tomcat.getHost().addChild(context);
    
            // 设置守护进程
            Thread thread = new Thread("tomcat-await-thread") {
                @Override
                public void run() {
                    super.run();
                    TomcatServer.this.tomcat.getServer().await();
                }
            };
            // 设置为非守护进程
            thread.setDaemon(false);
            thread.start();
        }
    }
    

    说明:

  • (1)指定了服务的端口,当然这个可以走配置化;

  • (2)注入了servlet,及添加了url映射

  • (3)添加了守护线程,保证web容器线程一直运行

  • 在MyApplication 中启动TomcatServer服务
  • package com.mp.framework.starter;
    
    import com.mp.framework.beans.MyBeanFactory;
    import com.mp.framework.core.ClassScanner;
    import com.mp.framework.handler.HandlerManager;
    import com.mp.framework.web.server.TomcatServer;
    import com.mp.framework.web.server.TomcatServerNew;
    import org.apache.catalina.LifecycleException;
    
    import java.io.IOException;
    import java.util.List;
    
    /**
     * ClassName: MyApplication
     * Function:  TODO
     * Date:      2020-05-07 09:44
     * author     mp
     * version    V1.0
     */
    public class MyApplication {
        public static void run(Class<?> cls,String[] args) throws LifecycleException, IOException, ClassNotFoundException {
            System.out.println("hello my0-spring application!!!");
            // 实例化Tomcat服务
           TomcatServer tomcatServer = new TomcatServer(args);
            tomcatServer.startServer();
        }
    }
    

     

  • 启动demo中的LaunchApp服务,可以看到Tomcat正常启动 
  • 跑通mvc,在浏览器中访问, http://localhost:9999/s01/aaa
  • servlet01......  至此mvc正常跑通

总结:

(1)web项目初现,但是离springboot的功能还相差甚远;

(2)接下来,将通过注解的方式来实现接口的调用..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值