Embed Tomcat8简单示例

本文介绍如何使用Apache Tomcat嵌入式部署HTTP及HTTPS服务,并提供具体配置与示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/mn960mn/article/details/52596359

一:项目依赖

[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>org.apache.tomcat.embed</groupId>  
  3.     <artifactId>tomcat-embed-core</artifactId>  
  4.     <version>8.5.5</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.apache.tomcat.embed</groupId>  
  8.     <artifactId>tomcat-embed-el</artifactId>  
  9.     <version>8.5.5</version>  
  10. </dependency>  
  11. <dependency>  
  12.     <groupId>org.apache.tomcat.embed</groupId>  
  13.     <artifactId>tomcat-embed-jasper</artifactId>  
  14.     <version>8.5.5</version>  
  15. </dependency>  

二:示例代码

servlet

[java]  view plain  copy
  1. package com.pp.server.tomcat;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. public class HomeServlet extends HttpServlet {  
  11.     private static final long serialVersionUID = 1L;  
  12.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
  13.         System.out.println("request scheme: " + req.getScheme());  
  14.         resp.getWriter().print("hello tomcat");  
  15.     }  
  16. }  

http示例

[java]  view plain  copy
  1. package com.pp.server.tomcat;  
  2.   
  3. import org.apache.catalina.core.StandardContext;  
  4. import org.apache.catalina.startup.Tomcat;  
  5. import org.apache.catalina.startup.Tomcat.FixContextListener;  
  6.   
  7. public class EmbedTomcatHttp {  
  8.     static final int port = 9080;  
  9.     static final String docBase = "e:/tmp/tomcat";  
  10.     public static void main(String[] args) throws Exception {  
  11.         Tomcat tomcat = new Tomcat();  
  12.         tomcat.setPort(port);  
  13.         tomcat.setBaseDir(docBase);  
  14.         tomcat.getHost().setAutoDeploy(false);  
  15.           
  16.         String contextPath = "/book";  
  17.         StandardContext context = new StandardContext();  
  18.         context.setPath(contextPath);  
  19.         context.addLifecycleListener(new FixContextListener());  
  20.         tomcat.getHost().addChild(context);  
  21.           
  22.         tomcat.addServlet(contextPath, "homeServlet"new HomeServlet());  
  23.         context.addServletMappingDecoded("/home""homeServlet");  
  24.         tomcat.start();   
  25.         tomcat.getServer().await();  
  26.     }  
  27. }  

访问地址:http://127.0.0.1:9080/book/home


https示例

[java]  view plain  copy
  1. package com.pp.server.tomcat;  
  2.   
  3. import org.apache.catalina.connector.Connector;  
  4. import org.apache.catalina.core.StandardContext;  
  5. import org.apache.catalina.startup.Tomcat;  
  6. import org.apache.catalina.startup.Tomcat.FixContextListener;  
  7. import org.apache.coyote.http11.Http11NioProtocol;  
  8.   
  9. public class EmbedTomcatHttps {  
  10.       
  11.     public static final String DEFAULT_PROTOCOL = "org.apache.coyote.http11.Http11NioProtocol";  
  12.     static final String docBase = "e:/tmp/tomcat";  
  13.     static final int port = 9080;  
  14.     static final int ports = 9090;  
  15.     public static void main(String[] args) throws Exception {  
  16.         Tomcat tomcat = new Tomcat();  
  17.         tomcat.setPort(port);  
  18.         tomcat.setBaseDir(docBase);  
  19.           
  20.         Connector connector = new Connector(DEFAULT_PROTOCOL);  
  21.         connector.setPort(ports);  
  22.           
  23.         Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();  
  24.         protocol.setKeystorePass("123456");  
  25.         protocol.setKeystoreFile("e:/tmp/ssl/boot.keystore");  
  26.         protocol.setKeyAlias("mykey");  
  27.         protocol.setSSLEnabled(true);  
  28.           
  29.         tomcat.getService().addConnector(connector);  
  30.         tomcat.getHost().setAutoDeploy(false);  
  31.           
  32.         String contextPath = "/book";  
  33.         StandardContext context = new StandardContext();  
  34.         context.setPath(contextPath);  
  35.         context.addLifecycleListener(new FixContextListener());  
  36.         tomcat.getHost().addChild(context);  
  37.           
  38.         tomcat.addServlet(contextPath, "homeServlet"new HomeServlet());  
  39.         context.addServletMappingDecoded("/home""homeServlet");  
  40.         tomcat.start();   
  41.         tomcat.getServer().await();  
  42.     }  
  43. }  

访问地址:

http://127.0.0.1:9080/book/home

https://127.0.0.1:9090/book/home

注意,在生成密钥的时候要用RSA加密,要不然只能在IE上打开,chrome(版本 53.0.2785.116)会禁止打开

<think>好的,我现在需要回答用户关于Tomcat Embed的功能、用途、配置以及嵌入式服务器的问题。首先,我需要回顾用户提供的引用内容,并结合之前的问题来组织答案。用户提供的引用中提到了嵌入式Tomcat的配置方式,比如通过Java代码手动配置而不是使用xml文件,还有版本号的设置和添加Servlet的例子。这些引用说明了嵌入式Tomcat与传统Tomcat的不同之处,特别是在配置方法上。接下来,我需要定义TomcatEmbed是什么。根据引用中的信息,嵌入式Tomcat允许将Tomcat服务器作为应用程序的一部分运行,无需单独部署。这可能适用于微服务或轻量级应用场景。功能和用途方面,需要强调嵌入式Tomcat的独立性、轻量化和灵活性。比如,可以内嵌在应用中,适合CI/CD流程,快速启动等。引用中的配置例子(如版本控制和编码配置)可以作为功能的一部分。 配置部分,用户提供的引用提到了通过Java代码配置,比如设置端口、添加Servlet和调整线程池。需要详细说明如何通过编程方式实现这些配置,可能给出代码示例,如引用中的Tomcat.addServlet的例子。 嵌入式服务器的优势,可能包括减少外部依赖、简化部署流程,适合云原生应用。引用中的链接可能提供更多配置细节,但用户没有给出具体内容,可能需要根据已知信息总结。最后,生成相关问题需要考虑用户可能的后续疑问,比如与传统Tomcat的区别、常见错误处理、性能调优等。这些问题应该基于回答内容自然延伸出来,确保相关性和实用性。 需要确保回答结构清晰,分点说明,并正确引用提供的资料。同时,注意LaTeX格式的应用,但用户的问题中可能不涉及数学公式,所以可能不需要使用。不过要遵守系统指令,如果有变量或公式的话需要用正确格式。现在整理各部分内容,确保覆盖所有用户的问题点,并正确引用提供的引用编号。</think>### Tomcat Embed 功能与用途解析 #### 一、Tomcat Embed 定义 **Tomcat Embed** 是 Apache Tomcat 的嵌入式版本,允许开发者将 Tomcat 服务器作为**应用程序的内置组件**直接集成到 Java 项目中[^2]。与传统 Tomcat 需独立部署不同,嵌入式版本通过程序化配置实现服务器生命周期管理,适用于轻量化、自包含的部署场景。 #### 二、核心功能 1. **内嵌式运行** 无需安装独立 Tomcat 服务,通过依赖库(如 `tomcat-embed-core`)即可在应用启动时自动初始化服务器实例[^2]。 ```xml <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> ``` 2. **动态配置** 通过 Java 代码替代传统 XML 配置,例如设置端口、线程池、Servlet 映射等[^1]: ```java Tomcat tomcat = new Tomcat(); tomcat.setPort(8080); Context ctx = tomcat.addContext("", null); Tomcat.addServlet(ctx, "Embedded", new CustomServlet()); ctx.addServletMappingDecoded("/*", "Embedded"); ``` 3. **快速启动与销毁** 支持通过 `tomcat.start()` 和 `tomcat.stop()` 方法控制服务器生命周期,适合单元测试和快速迭代[^3]。 #### 三、典型用途 1. **微服务架构** 在 Spring Boot 等框架中作为默认嵌入式容器,为每个微服务提供独立运行时环境[^2]。 2. **持续集成测试** 自动化测试中快速启动临时服务器,执行测试后立即释放资源。 3. **轻量级应用部署** 适用于 IoT 设备或 CLI 工具等资源受限场景,减少对外部服务的依赖。 #### 四、配置实践 | **配置项** | **代码示例** | |------------------|-----------------------------------------------------------------------------| | 端口设置 | `tomcat.setPort(8080);` | | 线程池调优 | `tomcat.getConnector().setAttribute("maxThreads", 200);` | | 添加自定义 Servlet | `Tomcat.addServlet(ctx, "demo", new HttpServlet(){/*...*/});`[^3] | | 静态资源映射 | `ctx.addParameter("docBase", "/opt/static");` | #### 五、优势对比 $$ \text{部署复杂度} = \begin{cases} \text{传统 Tomcat} \propto \text{外部依赖} \\ \text{嵌入式 Tomcat} \propto \text{代码配置} \end{cases} $$ 嵌入式版本通过减少环境依赖,显著提升部署效率[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值