将tomcat作为应用的一部分集成到应用中,使得应用可以直接开启http服务,对外提供接口。此时应用程序不必再遵守j2ee中的文件目录格式要求。

此种方式改变了以往先部署tomcat容器,再按照j2ee标准目录格式部署应用的做法,简化了网络应用的部署工作,也方便了将现有模块功能网络化访问的需求。

建立maven工程

pom.xml文件,其中使用了tomcat8.5.9版本,jdk1.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.founder</groupId>
<artifactId>embed-tomcat</artifactId>
<version>8.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>tomcat</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tomcat.version>8.5.9</tomcat.version>
<!-- <tomcat.version>7.0.32</tomcat.version> -->
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-util</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<!-- -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-i18n-ja</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-i18n-fr</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-i18n-es</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-el-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-coyote</artifactId>
<version>${tomcat.version}</version>
</dependency>
<!-- tomcat.version must be greater than 8.*.* <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jni</artifactId>
<version>${tomcat.version}</version> </dependency> -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina-ws</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina-ha</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina-ant</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

Tomcat组成结构

建立tomcat启动类

public class TomcatStarter {
public static void main(String[] args) throws LifecycleException {
Tomcat tomcat = new Tomcat();
// tomcat.setBaseDir("/temp");
Server server = tomcat.getServer();
// server.setPort(8080);
Service service = tomcat.getService();
service.setName("Tomcat-embbeded");
Connector connector = tomcat.getConnector();
// connector.setPort(8888);
Context context = tomcat.addContext("", "/");
tomcat.addServlet("", "test", new MyServlet());
context.addServletMappingDecoded("/*", "test");
server.start();
server.await();
}
}

实例初始化

tomcat

因为Tomcat启动时,需要指定它的工作目录(此原因还未深究),所以在建立Tomcat实例后,使用

tomcat.setBaseDir("/temp");

设置此目录。如果为设置过此目录,则默认会是“tomcat.8080”。8080是tomcat实例中设置的port值,默认为8080。

此外此目录中,要确保有“webapps”目录(此原因还未深究)。

server

通过

tomcat.getServer();

可获得一个Server实例,并可以设置此server的port值,在此端口上监听server关闭请求。

service

通过

tomcat.getService();

可获得service实例,其真实类型为StandardService。

此service实际为上述创建的server中的service;

connector

通过

tomcat.getConnector();

可获得一个connector实例,默认protocol为“HTTP/1.1”。

此connector实际上为上述创建的service中的connector。

connector.setPort(8888);

用于设置监听的端口,即http请求时访问的端口。

context

tomcat.addContext("", "/");

创建context时,会将默认的engine、host一同创建,因此在TomcatStarter中可以忽略其创建。

addContext中的两个参数分别是contextPath和docBase。

contextPath:即网络请求是的路径;

docBase:即在tomcatBaseDir/webapps目录下的目录,可以不包含任何文件,但必须存在(此原因还未深究)。

这里同server.xml中的配置相似。

servlet

tomcat.addServlet("", "test", new MyServlet());

用于向指定的context添加servlet。

context.addServletMappingDecoded("/*", "test");

用于完成servlet在context中的映射配置。

这里同web.xml中的配置相似。

注意:context的显示创建是不可以忽略的。

  • context用于映射网络请求到具体的程序;

注意:service、connector、engine、host的显式创建可以忽略。

  • engine、host会在context创建时创建;
  • server会在engine创建时创建;
  • service会在server创建时创建;
  • 如果没有显式创建connector,需要使用tomcat实例去设置port值,使用tomcat实例启动服务时,会创建connector;

简化后的TomcatStarter可以为

public class TomcatStarter {
public static void main(String[] args) throws LifecycleException {
Tomcat tomcat = new Tomcat();
tomcat.setPort(8080);
Context context = tomcat.addContext("", "/");
tomcat.addServlet("", "test", new MyServlet());
context.addServletMappingDecoded("/*", "test");
tomcat.start();
tomcat.getServer().await();
}
}

启动

server.start(); // 或者tomcat.start();
server.await(); //或者tomcat.getServer().await();

最新文章

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 大数据支持分表优化
  2. Runtime的几个小例子(含Demo)
  3. QGrphicsView, QGraphicsScene 和 QGraphicsItem 的区别
  4. Strategic game(POJ 1463 树形DP)
  5. PHP CI框架最近学到的内容
  6. Excel单元格所在的行和列变色
  7. Django笔记 manage.py脚本的使用
  8. Javascript 基础知识2017-03-17
  9. obj-c中-fobjc-arc-exceptions的解释
  10. requests session operation
  11. 记一次Mysql魔鬼实训
  12. HashMap源码之构造函数--JDK1.8
  13. php 重要函数归集
  14. Notes : &lt;Hands-on ML with Sklearn &amp; TF&gt; Chapter 1
  15. hud3007 Buried memory
  16. Qt信号和槽连接方式的选择
  17. apt 命令大全
  18. ioc autofac简单示例
  19. C# 向TIM或者QQ自动发送中文消息【微信也是可用的】 附测试GIF
  20. 控制台之console

热门文章

  1. 移动端复制粘贴clipboardjs
  2. 解决因为链表过长,sql查询慢的问题
  3. 1. Shell编程第一讲
  4. Python描述符深入理解
  5. swoole安装报错详解 mysqlnd_find_charset_nr in Unknow
  6. JS 只创建一个元素
  7. Linux之vi三种模式常用操作
  8. python学习之路---day19--面向对象--约束
  9. hibernate自动生成时报错问题
  10. Python web前端 05 JavaScript