tomcat依赖导入步骤_Tomcat长生不老之术——嵌入式

99624f69242a22c5d8c80fbcb774353b.png

前言

Tomcat是一个非常流行的Web服务器,用于部署和运行Java Web应用程序。一般情况下,我们都是在单独的Tomcat实例上运行自己的Web应用,其实与这种经典方案相比,我们可以将服务器运行时直接集成到应用程序中,从而更加的灵活和方便。

嵌入式Tomcat的Maven依赖

要使用嵌入式Tomcat并将其运行时与Java Web应用程序打包,请在Maven的pom.xml 文件中添加以下依赖项


<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-coreartifactId>
<version>${tomcat.version}version>


<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-jasperartifactId>
<version>${tomcat.version}version>


<groupId>org.apache.tomcat.embedgroupId>
<artifactId>tomcat-embed-logging-juliartifactId>
<version>${tomcat.version}version>

其中 tomcat.version 是指向Tomcat实际版本的属性


<tomcat.version>8.0.48tomcat.version>

Tomcat嵌入式实例

核心类是org.apache.catalina.startup.Tomcat

例如,以下代码创建并启动在端口号8082上运行的嵌入式Tomcat实例

package com.xiangxue.embedded;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class EmbeddedTomcatEx {

public static void main(String[] args) throws LifecycleException,
InterruptedException, ServletException {

Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);

Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());

Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {

Writer w = resp.getWriter();
w.write("Embedded Tomcat servlet.\n");
w.flush();
w.close();
}
});

ctx.addServletMapping("/*", "Embedded");

tomcat.start();
tomcat.getServer().await();
}
}

下面我们分段解释以上代码的作用:

Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);

Tomcat在端口8082上启动

Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());

每个应用程序都映射到上下文。使用该addContext()方法,我们创建了一个不是JSP文件且没有web.xml 文件的应用程序。我们使用根上下文路径和文档库的当前工作目录。

Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {

Writer w = resp.getWriter();
w.write("Embedded Tomcat servlet.\n");
w.flush();
w.close();
}
});

addServlet()方法添加了一个新的servlet 。servlet中使用流响应一些文本。

 ctx.addServletMapping("/*", "Embedded");

servlet mappping控制如何访问名为Embedded的servlet。对于我们的示例,任何URL最终都会调用我们的servlet。

tomcat.start();
tomcat.getServer().await();

最后Tomcat服务器启动。

服务器正在侦听端口8082,因此在Web浏览器中键入以下URL:

http://localhost:8082/

你就可以看到对应的效果

8c4f86e5843cae162d5013beb221d4b0.png

总结

基本上,我们用到嵌入式Tomcat主要有以下的目的:

1)对Java组件等Web组件进行快速单元测试

可以使用嵌入式Tomcat自动进行单元测试,而不是启动/停止Tomcat服务器并打开Web浏览器进行手动单元测试。

2)将Java Web应用程序作为独立的Java应用程序提供

最终用户现在可以运行JAR文件,该文件启动托管Web应用程序的嵌入式服务器。无需下载和安装Tomcat并手动部署Web应用程序。

3)对Tomcat更好的控制

集成嵌入式服务器使您能够以更好地控制服务器,从代码上控制服务器,并自动执行自行预订的步骤。

并且现在流行的SpringBoot架构中直接使用Main方法启动一个也是使用以上的方式实现,只是在实现中用到了更多的嵌入式Tomcat的相关的配置和参数。

e09b1e964897891e7e4a41d7c1b38444.png

我知道你在看

5d583472879d6822338334da2c249192.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux用户组笔记整理

目录 一、Linux用户组概念 二、常用命令 三、用户组信息存储位置 一、Linux用户组概念 Linux用户组&#xff08;group&#xff09;就是具有相同操作权限范围的Linux用户管理起来&#xff1b; 比如有时我们要让同一类用户具有相同的权限&#xff0c;比如查看、修改某一文件或执…

Linux文件操作实用笔记

Linux系统遵循一切皆是操作文件的规则。所以想用好Linux系统&#xff0c;就必须要掌握文件相关的操作。 1、创建文件命令&#xff1a;touch 语法格式&#xff1a; touch filename #filename 文件名称。 比如 touch hello.txt就会在当前木创建一个hello.txt的文件。 说明&#x…

安装完CentOS 7 后必做的七件事

CentOS是最多人用来运行服务器的 Linux 版本&#xff0c;最新版本是 CentOS 7。当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后&#xff0c;首要的工作肯定是加强它的安全性&#xff0c;以下列出的七件事&#xff0c;是你进一步配置系统和安装其他软件前必须做的。 1. 更改…

python显示小数点后几位数_python窗口编程-3:数位处理(整数)

我们在上一次课程中(python窗口编程-2&#xff1a;风格与布局 )&#xff0c;制作了完整的计算器窗口界面&#xff0c;只是那个窗口没有真正的功能&#xff0c;是点击任何按钮都会关闭。这一次&#xff0c;我们加入一些事件处理的功能&#xff0c;让它成为一个正常工作的窗口程序…

Linux文件目录基础笔记

1、进入目录名称&#xff1a;cdcd命令主要是方便用户切换到不同目录的指令。比如&#xff1a;cd #只执行cd命令默认进入root的根目录cd /home #进入home目录&#xff0c;如果home目录有testdir目录的话&#xff0c;可以执行 cd testdir 进入testdir目录。2、创建目录命令&#…

eclipse安卓工程的构建、配置连接模拟器、安卓工程结构介绍

安卓工程构建及第一个安卓程序运行&#xff1a; 首先新建安卓工程&#xff1a; 然后填写APP信息&#xff0c;下面的包名一般都是公司域名的倒写&#xff0c;包名中不能有中文&#xff0c;否则会报错。 然后配置一些安卓app的选项 有关app启动的图标&#xff08;就像QQ的企鹅一…

Linux中su和sudo的用法整理

一、为什么会有su和sudo命令&#xff1f;主要是因为在实际工作当中需要在Linux不同用户之间进行切换。root用户权限最高很多时候需要root用户才能执行一些关键命令。所以需要临时切换为root用户。工作完成后&#xff0c;考虑到系统的安全性避免误操作需要切换为普通用户。su和s…

codeforces 650B - Image Preview

题意&#xff1a;给你n个照片&#xff0c;从第一个照片开始看&#xff0c;如果一张照片是w&#xff0c;那么要花费b时间去反转他&#xff0c;否则不用反转&#xff0c;看一张从来没看过的照片要1时间&#xff0c; 从一张滑动到另一张要a时间。如果一张照片看过&#xff0c;则不…

asp js单步调试_如何使用Chrome的控制台高效的调试Javascript代码?

引言在我们的日常开发中我们常常会遇到JavaScript的调试问题&#xff0c;而我们解决问题的传统解决方案就是使用大量的console.log或者console对象的其他方法&#xff0c;这会给我们带来很多不便&#xff0c;特别是遇到复杂问题的时候&#xff0c;可能会出现大量的console.log&…

安卓App的启动过程、安卓布局分类及布局和页面的关系

Android App 启动流程: 当你想要启动一个app时&#xff0c;首先得点击该app桌面图标。那点击图标时到底发生了什么呢&#xff1f;先看个理论知识 .Launcher: launcher其实就是一个app&#xff0c;从功能上说&#xff0c;是对手机上其他app的一个管理和启动&#xff0c;从代码…

Linux文件默认权限和umask笔记

关于Linux文件默认权限的问题&#xff0c;可以实际先尝试一下如下命令&#xff1a;root用户登录[rootlocalhost test]# touch file1[rootlocalhost test]# ls-l file1-rw-r--r-- 1 root root 0 May 5 08:28 file1 #输出结果 对应的数字权限 644[rootlocalhost test]# touch fi…

Android相对布局(RelativeLayout)常用属性、练习使用按键、文本框等控件、线性布局(LinearLayout)属性

RelativeLayout中子控件常用属性&#xff1a; 子控件默认是从父控件的左上角开始排列的 相对于父控件 android:layout_alignParentTop"true" 和父控件的顶部对齐android:layout_alignParentBottom"true" 和父控件的底部对齐android:layout_alignPar…

Seata AT模式

基本思路 先决条件 支持本地ACID事务的关系数据库。通过JDBC访问数据库的Java应用程序。 整体机制 从两个阶段提交协议的演变&#xff1a; 阶段1&#xff1a;在同一本地事务中提交业务数据和回滚日志&#xff0c;然后释放本地锁和连接资源。阶段2&#xff1a; 对于提交情况…

自媒体各大平台收益对比_哪些自媒体平台没有新手期,适合小白撸收益?

2-26把我设置为星标&#xff0c;不错过每一次的干货&#xff5e;各大自媒体平台的新手期总是让小白们望而却步&#xff0c;特别是百家号审核非常严格&#xff0c;如果没思路、没人指导&#xff0c;过新手有难度。不过&#xff0c;还是有很多平台对新手宝宝很友好&#xff0c;没…

Linux关于文件的权限笔记

1、调整文件的权限命令&#xff1a;chmodLinux的每个文件都定义了文件的拥有者&#xff1a;u(user)、拥有组&#xff1a;g&#xff08;group&#xff09;、其他人&#xff1a;o&#xff08;others&#xff09;权限&#xff0c;对应的权限用rwx的组合来定义。使用chmod命令&…

启动rrt什么意思_python学习第144课--创建虚拟机、设置虚拟机参数以及启动虚拟机...

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】上节我们介绍了下载虚拟机以及centOS的相关事项&#xff0c;现在我们创建虚拟机。●创建虚拟机安装好virtualbox之后&#xff0c;我们点击Oracle VM VirtualBox打开管理器&#xff0c;界面如下图&#xff1a;你…