做者:享学课堂King老师java
转载请声明出处!web
Tomcat是一个很是流行的Web服务器,用于部署和运行Java Web应用程序。通常状况下,咱们都是在单独的Tomcat实例上运行本身的Web应用,其实与这种经典方案相比,咱们能够将服务器运行时直接集成到应用程序中,从而更加的灵活和方便。apache
要使用嵌入式Tomcat并将其运行时与Java Web应用程序打包,请在Maven的pom.xml 文件中添加如下依赖项浏览器
<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>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
复制代码
其中 tomcat.version 是指向Tomcat实际版本的属性tomcat
<properties>
<tomcat.version>8.0.48</tomcat.version>
</properties>
复制代码
核心类是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();
}
}
复制代码
下面咱们分段解释以上代码的做用:app
Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);
复制代码
Tomcat在端口8082上启动ide
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:
你就能够看到对应的效果
基本上,咱们用到嵌入式Tomcat主要有如下的目的:
1)对Java组件等Web组件进行快速单元测试
能够使用嵌入式Tomcat自动进行单元测试,而不是启动/中止Tomcat服务器并打开Web浏览器进行手动单元测试。
2)将Java Web应用程序做为独立的Java应用程序提供
最终用户如今能够运行JAR文件,该文件启动托管Web应用程序的嵌入式服务器。无需下载和安装Tomcat并手动部署Web应用程序。
3)对Tomcat更好的控制
集成嵌入式服务器使您可以以更好地控制服务器,从代码上控制服务器,并自动执行自行预订的步骤。
而且如今流行的SpringBoot架构中直接使用Main方法启动一个也是使用以上的方式实现,只是在实现中用到了更多的嵌入式Tomcat的相关的配置和参数。
你的赞和关注是我继续创做的动力~