tomcat和应用集成
将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();
tomcat和应用集成的更多相关文章
- jenkins+Gitlab+maven+tomcat实现自动集成、打包、部署
一.前言 首先出于提高自己技术水平和琢磨能做点什么能提高工作效率,上线工作实在无聊.重复(手动编译.打包,传包,重启),于是就想到了jenkins,jenkins持续集成已经不是什么新鲜的话题,网上文 ...
- Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(一)——Maven,Tomcat,Spring集成
1. 创建Maven Web工程 (1) 磁盘上创建Maven工程所需要的文件夹结构如下: (2) 在与src同级目录中创建pom.xml文件: <project xm ...
- Svn + tomcat + Hudson持续集成部署
1.首先下载hudson 2. 我这里使用hudson-3.0.1版本 3. 下载后hudson是一个 war 包 4. 操作部署: (1). 直接将hudson的war包复制到tomcat的weba ...
- jenkins maven tomcat做持续集成
maven 采用 maven 3.0以上的版本.tomcat 采用 tomcat 7.0 以上的版本 1. tomcat 配置用户账号和权限 tomcat-users.xml <role rol ...
- Jenkins+SVN+maven+Tomcat构建自动化集成任务
Jenkins安装方法详解:https://www.cnblogs.com/lizhe860/p/9901257.html 一.安装maven插件 1.依次进入系统管理→插件管理→可选插件, 找到Ma ...
- Eclipse集成Tomcat:6个常见的”how to”问题
学习一门新技术通常是一个很困难的过程,当你想要同时学习两门有交叉的新技术的时候,这个过程会变得更困难.Tomcat和Eclipse是Java EE开发中最流行的2个必备神器,因此,为了成为一个专业的开 ...
- windows系统下Tomcat与Apache服务器集成
说明:此文是看书真实试验成功的,书中提到了不同版本不兼容的问题,但是很荣幸我没碰到,此例可供参考. 本文假设你已经有了java环境和tomcat,你已经熟悉tomcat的应用. Jdk 1.7.0_5 ...
- Tomcat开发技术之与HTTP服务器的集成
Tomcat最主要的功能是提供Servlet/jsp容器,尽管它也可以作为独立的Java Web服务器,它在对静态资源(如Html文件或图像文件)的处理速度,以及提供的Web服务器治理功能方面都不如其 ...
- Myeclipse 2017 下载+安装+激活+集成配置【JRE 8+Tomcat 9+MySQL 5.7.29】
Myeclipse 2017 的下载 Myeclipse 2017 下载地址:https://www.jianguoyun.com/p/DTEBo1cQ6LnsBxj9984C Myeclipse 2 ...
随机推荐
- sqlite数据库文件查看
- 【ARC062F】 Painting Graphs with AtCoDeer 点双连通分量+polya定理
Description 给定一张N点M边的无向图,每条边要染一个编号在1到K的颜色. 你可以对一张染色了的图进行若干次操作,每次操作形如,在图中选择一个简单环(即不经过相同点的环),并且将其颜色逆时针 ...
- 【spring源码】bean的实例化(转载)
首先来看一段代码,看过上一节的朋友肯定对这段代码并不陌生.这一段代码诠释了Spring加载bean的完整过程,包括读取配置文件,扫描包,加载类,实例化bean,注入bean属性依赖. 上一节介绍了Sp ...
- Pycharm使用的一些问题!!!
1.pycharm如何更改主题.如何更改字体的大小? 2.pycharm如何import第三方库? 1.更改主题和字体大小 主题变暗,字体变大! 2.如何导入第三方库?
- linux防火墙(四)—— SNET和DNET原理及应用
图(1) 一.SNAT策略 应用环境:局域网主机共享单个公网IP地址接入Internet,简单的说就是企业内部局域网想访问外部服务器时,网关型防火墙需要开启的SNAT应用策略. SNAT策略原理:网关 ...
- 老男孩Day11作业:selectors版socket
一.作业需求: 使用SELECT或SELECTORS模块实现并发简单版FTP 允许多用户并发上传下载文件 二.readme 一.作业需求: 使用SELECT或SELECTORS模块实现并发简单版FTP ...
- win10+anaconda环境下pyqt5+qt tools+eric6.18安装及汉化过程
最近需要用python编写一个小程序的界面,选择了pyqt5+eric6的配套组合,安装过程中遇到一些坑,特此记录.参考书籍是电子工业出版社的<PyQt5快速开发与实战>. 因为我使用an ...
- Python开发MapReduce系列(二)Python实现MapReduce分桶
版权声明:本文为博主原创文章,未经博主允许不得转载 首先,先引出两点来展开下面的话题. (1)map阶段的排序是在hash之后,写入磁盘之前进行.排序的两个关键字是partition(分区编号)和 ...
- 关于 SimpleMembership 中 CreateDate 的问题
使用 WebMatrix.WebData.WebSecurity.CreateUserAndAccount(model.UserName, model.Password, ...
- python---day14( 内置函数二)
内置函数二一:匿名函数 lambda函数 lambda 表示匿名函数,不需要用def 来申明. 语法: 函数名=lambda 参数:返回值 ----〉 案例:f=lambda n:n*n 例子01: ...