简单记录一下内部tomcat启动

maven pom.xml

  1. <dependencies>
  2. <!-- embed tomcat dependency -->
  3. <dependency>
  4. <groupId>org.apache.tomcat.embed</groupId>
  5. <artifactId>tomcat-embed-core</artifactId>
  6. <version>8.5.28</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.apache.tomcat</groupId>
  10. <artifactId>tomcat-jasper</artifactId>
  11. <version>8.5.28</version>
  12. </dependency>
  13. <!-- spring dependency -->
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-web</artifactId>
  17. <version>5.0.4.RELEASE</version>
  18. <scope>compile</scope>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.springframework</groupId>
  22. <artifactId>spring-webmvc</artifactId>
  23. <version>5.0.4.RELEASE</version>
  24. <scope>compile</scope>
  25. </dependency>
  26. </dependencies>
  27. <build>
  28. <plugins>
  29. <!-- 添加编译插件 -->
  30. <plugin>
  31. <groupId>org.apache.maven.plugins</groupId>
  32. <artifactId>maven-compiler-plugin</artifactId>
  33. <version>3.5.1</version>
  34. <configuration>
  35. <source>1.8</source>
  36. <target>1.8</target>
  37. <encoding>UTF-8</encoding>
  38. </configuration>
  39. </plugin>
  40. </plugins>
  41. </build>

tomcat启动类

  1. /**
  2. *
  3. * @author Programming is an art from.
  4. * @Description: TODO
  5. */
  6. public class TomcatStart {
  7. public static int TOMCAT_PORT = 8080;
  8. public static String TOMCAT_HOSTNAME = "127.0.0.1";
  9. public static String WEBAPP_PATH = "src/main";
  10. public static String WEBINF_CLASSES = "/WEB-INF/classes";
  11. public static String CLASS_PATH = "target/classes";
  12. public static String INTERNAL_PATH = "/";
  13. public static void main(String[] args) throws ServletException, LifecycleException {
  14. TomcatStart.run();
  15. }
  16. public static void run() throws ServletException, LifecycleException {
  17. Tomcat tomcat = new Tomcat();
  18. tomcat.setPort(TomcatStart.TOMCAT_PORT);
  19. tomcat.setHostname(TomcatStart.TOMCAT_HOSTNAME);
  20. tomcat.setBaseDir("."); // tomcat 信息保存在项目下
  21. /*
  22. * https://www.cnblogs.com/ChenD/p/10061008.html
  23. */
  24. StandardContext myCtx = (StandardContext) tomcat
  25. .addWebapp("/access", System.getProperty("user.dir") + File.separator + TomcatStart.WEBAPP_PATH);
  26. /*
  27. * true时:相关classes | jar 修改时,会重新加载资源,不过资源消耗很大
  28. * autoDeploy 与这个很相似,tomcat自带的热部署不是特别可靠,效率也不高。生产环境不建议开启。
  29. * 相关文档:
  30. * http://www.blogjava.net/wangxinsh55/archive/2011/05/31/351449.html
  31. */
  32. myCtx.setReloadable(false);
  33. // 上下文监听器
  34. myCtx.addLifecycleListener(new AprLifecycleListener());
  35. /*String webAppMount = System.getProperty("user.dir") + File.separator + TomcatStart.CLASS_PATH;
  36. WebResourceRoot root = new StandardRoot(myCtx);
  37. root.addPreResources(
  38. new DirResourceSet(root, TomcatStart.WEBINF_CLASSES, webAppMount, TomcatStart.INTERNAL_PATH));*/
  39. // 注册servlet
  40. tomcat.addServlet("/access", "demoServlet", new DemoServlet());
  41. // servlet mapping
  42. myCtx.addServletMappingDecoded("/demo.do", "demoServlet");
  43. tomcat.start();
  44. tomcat.getServer().await();
  45. }
  46. }

注意! contextPath不要设置为 /

否则会报错, 错误信息为以下。

  1. 警告: 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 []
  2. Exception in thread "main" java.lang.NullPointerException
  3. at org.apache.catalina.startup.Tomcat.addServlet(Tomcat.java:341)
  4. at org.apache.catalina.startup.Tomcat.addServlet(Tomcat.java:325)
  5. at cn.learn.config.TomcatStart.run(TomcatStart.java:63)
  6. at cn.learn.config.TomcatStart.main(TomcatStart.java:33)

servlet class

  1. /**
  2. *
  3. * @author Programming is an art from.
  4. * @Description: TODO
  5. */
  6. public class DemoServlet extends HttpServlet{
  7. /**
  8. *
  9. */
  10. private static final long serialVersionUID = 1L;
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. doPost(req, resp);
  14. }
  15. @Override
  16. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17. resp.getWriter().print("access success!!!");
  18. }
  19. }

启动main方法,访问成功喽!

http://127.0.0.1:8080/access/demo.do

Embed Tomcat Java(内嵌tomcat启动简述)的更多相关文章

  1. Spring Boot移除内嵌Tomcat,使用非web方式启动

    前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.在pom.xml文件中去 ...

  2. 基于内嵌Tomcat的应用开发

    为什么使用内嵌Tomcat开发? 开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率. 怎么搭建内嵌To ...

  3. 内嵌tomcat最简单用法

    maven项目引入内嵌tomcat依赖 <dependency> <groupId>org.apache.tomcat.embed</groupId> <ar ...

  4. springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤

    去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.sprin ...

  5. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  6. 内嵌tomcat启动速度慢

    项目上最近要把内置的jetty换成tomcat, 来更好的支持servlet 3.0 本来以为换个容器, 几十行代码就好了. 实际上换了tomcat后, 一开始启动tomcat, 非常的慢. jett ...

  7. 查看和指定SpringBoot内嵌Tomcat的版本

    查看当前使用的Tomcat版本号 Maven Repository中查看 比如我们需要查Spring Boot 2.1.4-RELEASE的内嵌Tomcat版本, 可以打开链接: https://mv ...

  8. spring boot 2 内嵌Tomcat Stopping service [Tomcat]

    我在使用springboot时,当代码有问题时,发现控制台打印下面信息: Connected to the target VM, address: '127.0.0.1:42091', transpo ...

  9. 如何优雅的关闭基于Spring Boot 内嵌 Tomcat 的 Web 应用

    背景 最近在搞云化项目的启动脚本,觉得以往kill方式关闭服务项目太粗暴了,这种kill关闭应用的方式会让当前应用将所有处理中的请求丢弃,响应失败.这种形式的响应失败在处理重要业务逻辑中是要极力避免的 ...

随机推荐

  1. reids不重启切换rdb到aof

    reids不重启切换rdb到aof

  2. HDU6440 Dream

    题目链接:https://vjudge.net/problem/HDU-6440 知识点: 构造.费马小定理 题目大意: 给定一个素数 $p$,要求定义一个加法运算表和一个乘法运算表,尺寸都为 $p ...

  3. POJ1015

    题目链接:http://poj.org/problem?id=1015 大概题意: 法庭要挑选m人陪审团.先随机挑选n个公民,对于每个公民,控辩双方都有各自的“喜好度”p[ ] 和 d[ ],法庭要尽 ...

  4. python常见面试题讲解(二)计算字符个数

    题目描述 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字 ...

  5. Yii2.0 URL美化功能Nginx与Apache配置文件

    NGinx: location / { index index.html index.htm index.php; try_files $uri $uri/ /index.php$is_args$ar ...

  6. 第11章 支撑向量机SVM

    Support Vector Machine ,  问题:如果决策边界不唯一 , , , , , , , ,  s.t.(such that):之前都是全局最优化问题,这次是有条件的最优化问题 har ...

  7. EF用导航熟悉遍历从表时,删除主表出错

    var entitys= Repository.Table.Where(a => ids.Contains(a.UUID)).ToList(); entitys.ForEach(a => ...

  8. [CSS工具推荐]0001.推荐 10 个超棒的 CSS3 代码生成工具

    引言:新的在线工具和 WebApp 帮助开发者快速地创建网站而不用写代码.前端开发已经在框架和代码库方面有了很大的进展. 现在许多开发者已经忘记了代码生成器在构建网站时的价值.下面的资源是完全免费的 ...

  9. Django ListView DetailView等基于类的视图如何添加装饰器?

    场景: Django开发中,如果我们使用了类视图,如:ListView.DetailView.UpdateView等,这时我们又想要对这个视图添加一个装饰器,来实现某种功能,这时候该怎么处理呢? 环境 ...

  10. JAVA中的注释方法

    Java的三种注释方法 ①单行注释:使用 // ,其注释内容从//开始到本行结束,比较常用, 快捷键为:Ctrl + / 或者  Ctrl + Shift + C  取消注释:Ctrl + / 或者  ...