内嵌式tomcat启动web工程

1、内嵌式tomcat启动web工程,样例工程代码点击下载。

       下载地址: 点击打开链接


2、tomcat 启动类

package com.test;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Tomcat;
import org.apache.tomcat.util.scan.StandardJarScanner;

import javax.servlet.ServletException;

/**
 * 嵌入式tomcat web应用启动类,
 */
public class TomcatBootstrapHelper {
    private static final char ENTER_CHAR = '\n';
    /**
     * 默认端口
     */
    private static final int DEFAULT_PORT = 8080;
    private static final String DEFULT_ENV = "dev";
    private int port = DEFAULT_PORT;

    /**
     * 是否启用servlet 3.0 支持,如果启用的话,就需要扫描jar包中是否有Servlet等annotation,这个会影响启动时间,默认不开启
     */
    private boolean isServlet3Enable = false;

    /**
     * 构建一个<code>TomcatBootstrapHelper.java</code>
     *
     * @param port 端口
     * @param isServlet3Enable 是否启用servlet 3.0
     * 支持,如果启用的话,就需要扫描jar包中是否有Servlet等annotation,这个会影响启动时间,默认不开启
     * @param env 设置环境变量 spring.profiles.active
     */
    public TomcatBootstrapHelper(int port, boolean isServlet3Enable, String env) {
        System.setProperty("spring.profiles.active", env);
        this.port = port;
        this.isServlet3Enable = isServlet3Enable;
    }

    /**
     * 构建一个<code>TomcatBootstrapHelper.java</code><br>
     * 环境变量spring.profiles.active=dev
     *
     * @param port 端口
     * @param isServlet3Enable 是否启用servlet 3.0
     * 支持,如果启用的话,就需要扫描jar包中是否有Servlet等annotation,这个会影响启动时间,默认不开启
     */
    public TomcatBootstrapHelper(int port, boolean isServlet3Enable) {
        this(port, isServlet3Enable, DEFULT_ENV);
    }

    /**
     * 构建一个<code>TomcatBootstrapHelper.java</code><br>
     * 不启用servlet 3.0 支持、环境变量spring.profiles.active=dev
     *
     * @param port 端口
     */
    public TomcatBootstrapHelper(int port) {
        this(port, false);
    }

    /**
     * 构建一个<code>TomcatBootstrapHelper.java</code><br>
     * 端口:8080、不启用servlet 3.0 支持、环境变量spring.profiles.active=dev
     */
    public TomcatBootstrapHelper() {
        this(DEFAULT_PORT);
    }

    public void start() {
        try {
            long begin = System.currentTimeMillis();
            Tomcat tomcat = new Tomcat();
            configTomcat(tomcat);
            tomcat.start();
            long end = System.currentTimeMillis();
            log(end - begin);
            //在控制台回车就可以重启,提高效率
            while (true) {
                char c = (char) System.in.read();
                if (c == ENTER_CHAR) {
                    begin = System.currentTimeMillis();
                    System.out.println("重启tomcat...");
                    tomcat.stop();
                    tomcat.start();
                    end = System.currentTimeMillis();
                    log(end - begin);
                }
            }
        } catch (Exception e) {
              e.printStackTrace();
        }

    }

    private void configTomcat(final Tomcat tomcat) throws ServletException {
         tomcat.setBaseDir("target");
        tomcat.setPort(port);
        Connector connector = new Connector("HTTP/1.1");
        connector.setPort(port);
        connector.setURIEncoding("utf-8");
        tomcat.setConnector(connector);
        tomcat.getService().addConnector(connector);
        String webappPath = getWebappsPath();
        System.out.println("webapp目录:" + webappPath);
        Context ctx = tomcat.addWebapp("/", webappPath);
        StandardJarScanner scanner = (StandardJarScanner) ctx.getJarScanner();
        if (!isServlet3Enable) {
            scanner.setScanAllDirectories(false);
            scanner.setScanClassPath(false);
        }
        tomcat.setSilent(true);
        System.setProperty("org.apache.catalina.SESSION_COOKIE_NAME", "JSESSIONID" + port);
    }

    private void log(long time) {
        System.out.println("********************************************************");
        System.out.println("启动成功: http://127.0.0.1:" + port + "   in:" + time + "ms");
        System.out.println("您可以直接在console里敲回车,重启tomcat");
        System.out.println("********************************************************");
    }

    public String getWebappsPath() {
        String file = getClass().getClassLoader().getResource(".").getFile();
        return file.substring(0, file.indexOf("target")) + "src/main/webapp";
    }
}





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值