美文网首页
Embed Tomcat Java(内嵌tomcat启动简述)

Embed Tomcat Java(内嵌tomcat启动简述)

作者: BETWEENAND | 来源:发表于2019-05-06 22:30 被阅读0次

    简单记录一下内部tomcat启动

    maven pom.xml

        <dependencies>
            <!-- embed tomcat dependency -->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-core</artifactId>
                <version>8.5.28</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jasper</artifactId>
                <version>8.5.28</version>
            </dependency>
    
            <!-- spring dependency -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>5.0.4.RELEASE</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.0.4.RELEASE</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <!-- 添加编译插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    

    tomcat启动类

    /**
     * 
     * @author Programming is an art from.
     * @Description: TODO
     */
    public class TomcatStart {
    
        public static int TOMCAT_PORT = 8080;
        public static String TOMCAT_HOSTNAME = "127.0.0.1";
        public static String WEBAPP_PATH = "src/main";
        public static String WEBINF_CLASSES = "/WEB-INF/classes";
        public static String CLASS_PATH = "target/classes";
        public static String INTERNAL_PATH = "/";
        
        public static void main(String[] args) throws ServletException, LifecycleException {
            TomcatStart.run();
        }
        
        public static void run() throws ServletException, LifecycleException {
            Tomcat tomcat = new Tomcat();
            tomcat.setPort(TomcatStart.TOMCAT_PORT);
            tomcat.setHostname(TomcatStart.TOMCAT_HOSTNAME);
            tomcat.setBaseDir("."); // tomcat 信息保存在项目下
            
            /*
             * https://www.cnblogs.com/ChenD/p/10061008.html
             */
            StandardContext myCtx = (StandardContext) tomcat
                .addWebapp("/access", System.getProperty("user.dir") + File.separator + TomcatStart.WEBAPP_PATH);
            /*
             * true时:相关classes | jar 修改时,会重新加载资源,不过资源消耗很大
             * autoDeploy 与这个很相似,tomcat自带的热部署不是特别可靠,效率也不高。生产环境不建议开启。
             * 相关文档:
             * http://www.blogjava.net/wangxinsh55/archive/2011/05/31/351449.html
             */
            myCtx.setReloadable(false);
            // 上下文监听器
            myCtx.addLifecycleListener(new AprLifecycleListener());
            
            /*String webAppMount = System.getProperty("user.dir") + File.separator + TomcatStart.CLASS_PATH;
            WebResourceRoot root = new StandardRoot(myCtx);
            root.addPreResources(
                new DirResourceSet(root, TomcatStart.WEBINF_CLASSES, webAppMount, TomcatStart.INTERNAL_PATH));*/
            
            // 注册servlet
            tomcat.addServlet("/access", "demoServlet", new DemoServlet());
            // servlet mapping
            myCtx.addServletMappingDecoded("/demo.do", "demoServlet");
            tomcat.start();
            tomcat.getServer().await();
        }
        
    }
    

    注意! contextPath不要设置为 /
    否则会报错, 错误信息为以下。

    警告: A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to []
    Exception in thread "main" java.lang.NullPointerException
        at org.apache.catalina.startup.Tomcat.addServlet(Tomcat.java:341)
        at org.apache.catalina.startup.Tomcat.addServlet(Tomcat.java:325)
        at cn.learn.config.TomcatStart.run(TomcatStart.java:63)
        at cn.learn.config.TomcatStart.main(TomcatStart.java:33)
    

    servlet class

    /**
     * 
     * @author Programming is an art from.
     * @Description: TODO
     */
    public class DemoServlet 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("access success!!!");
        }
    
    
    }
    

    启动main方法,访问成功喽!
    http://127.0.0.1:8080/access/demo.do

    相关文章

      网友评论

          本文标题:Embed Tomcat Java(内嵌tomcat启动简述)

          本文链接:https://www.haomeiwen.com/subject/ibaxoqtx.html