1.两种类型tomcat

  • 传统tomcat:需要jar部署,通过BootStrap启动
  • 嵌入式tomcat:maven引入Tomcat类,自定义启动插件(Connector,Engin,Host,Context,Wrapper)
    • 能搞嵌入式的根本原因:开源
    • 如SpringBoor使用的就是嵌入式Tomcat
    • Tomcat类中有默认TomcatRunner插件,可以启动;但仍然可以自定义tomcat插件,来做自定义启动

2.手写传统tomcat

具体请参考:

  • 【Tomcat】第八篇:基于BIO的150代码手写Tomcat(超详细注释)
  • 【Tomcat】第九篇:使用 Netty 重构之前手写的 Tomcat

3.手写嵌入式tomcat插件

下面先贴一张项目结构的截图:

3.1 在 pom.xml 引入依赖

<dependencies><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><!-- 引入Tomcat类 --><dependency><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version></dependency>
</dependencies>

3.2 准备 Servlet 示例

先写一个处理业务逻辑的Servlet示例,在下面插件配置时要用

public class DemoServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");response.getWriter().println("hello world!!!");//        String message = request.getParameter("message");
//        response.getWriter().print(message);}
}

3.3 编写插件:EmbeddedTomcat(核心)

这里先强调一下,插件的目的是为了对现有资源灵活运用,它既可以大到几十兆的压缩包,也可以小到只有一个类。就比如这里的嵌入式tomcat插件,它只用下面的 EmbeddedTomcat 这一个类就可以实现对引入的 Tomcat 包相关资源的灵活管控 。

EmbeddedTomcat 这个类主要有两个作用:

  1. 实现自定义配置和启动。即传统tomcat的server.xml 和 web.xml 的相关配置都在这里。
  2. 是启动 Tocmat 的入口。
public class EmbeddedTomcatServer {public static void main(String[] args) throws LifecycleException {Tomcat tomcat = new Tomcat();// 1.设置Connctor,包括端口Connector connector = tomcat.getConnector();connector.setPort(8080);// 2.设置Engine,此处没什么可以设的...// 3.设置Host,包括域名,context路径 ---> 至此Tomcat可以正常启动,只不过没有Host host = tomcat.getHost();host.setAppBase("webapp");host.setName("localhost");// 4.设置Context,包括host与应用的位置String classpath = System.getProperty("user.dir"); // C:\Users\13275\Documents\Java\...Context context = tomcat.addContext(host, "/", classpath);if (context instanceof StandardContext) {// Context还可以设置默认web.xml// StandardContext ctx = (StandardContext)context;// ctx.setDefaultContextXml("C:\\Users\\...\\web.xml");// 5.设置Wrapper(Servlet),及其映射路径(注:servlet中的@webServlet没用)Wrapper servlet = tomcat.addServlet("/", "DemoServlet", new DemoServlet());servlet.addMapping("/demo");}// 启动tomcattomcat.start();// 防止main提前结束,使main阻塞tomcat.getServer().await();}
}

成果演示

启动EmbeddedTomcat的main函数,然后在浏览器输入localhost:8080/demo,可以看到正确输出。

【Tomcat】第十篇:手写嵌入式Tomcat插件(超简单)相关推荐

  1. Tomcat(二):手写嵌入式tomcat

    一.什么是嵌入式tomcat 嵌入式tomcat:非传统的部署方式,将tomcat嵌入到主程序中进行运行. 二.嵌入式tomcat的优点 灵活部署.任意指定位置.通过复杂的条件判断 三.Maven集成 ...

  2. 基于深度学习的手写数字实现及超简单的英文字母识别

    本文章大致分为5个板块,分别是MNIST数据库,深度学习神经网络的构建,图像预处理,图像识别,简单的英文字母识别展示. 1.MNIST数据库 总所周知,MNIST数据库是专门用于为手写数字识别系统提供 ...

  3. 手写嵌入式Tomcat(带详细注解)

    导读 本文分为两部分 1. 实现思路分析部分 2. 实现代码部分 一. 实现思路分析 使用Tomcat的API实现, 步骤如下 新建一个Tomcat对象 设置Tomccat的端口号 设置Context ...

  4. tomcat应用服务器有哪些,手写一个Tomcat应用服务器

    mytomcat 项目简介 自己实现的简易的Tomcat Tomca 实现说明 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道.这是一只神奇的猫,我们可以通过实现它来深 ...

  5. application.properties 不识别_阿波罗 STM32F767 开发板资料连载第五十八章 手写识别实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第五十八章 手写识别实验 ...

  6. 手写MyBatis分页插件

    目录 前言 MyBatis插件 手写分页插件 总结 前言 在开发查询类的接口时,有一个让开发者比较头疼的问题:分页. 如果每次都要开发者自己去写limit,计算起始行和偏移量就太烦了,于是市面上诞生了 ...

  7. 第五篇 - 手写Tomcat(基于Netty)热部署

    Github源码下载地址:https://github.com/chenxingxing6/sourcecode/tree/master/code-netty-tomcat 一.前言 Tomcat是一 ...

  8. 第四篇 - 手写RPC框架

    Github源码下载地址:https://github.com/chenxingxing6/myrpc 一.前言 RPC(Remote Procedure Call)-远程过程调用,它是一种通过网络从 ...

  9. 第一篇 - 手写SpringMvc框架

    Github源码下载地址:https://github.com/chenxingxing6/springmvc CSDN源码下载地址:https://download.csdn.net/downloa ...

最新文章

  1. 阿里云免费开放一切AI算力,加速新型冠状病毒新药和疫苗研发
  2. Codeforces Round #596 Div. 2 C ~E
  3. Mac OS X:在标题栏上显示目录完整路径
  4. BRCM eCos下的编译及问题
  5. C语言、嵌入式重点知识:回调函数
  6. 如何用AE做出动画效果杭州UI设计分享方法
  7. 《人工智能狂潮》读后感——什么是人工智能?(一)
  8. 浏览器的历史浏览记录_如何在任何浏览器中清除历史记录
  9. Excel去除中文,只留英文和数字
  10. ANT:修改测试报告的样式jmeter-results-shanhe-me.xs
  11. wo-27s管理员账户和密码_Mac管理员忘记密码怎么办?
  12. uart协议测试软件,Uart2any(windows串口调试工具)
  13. HTML5期末大作业:动漫人物介绍网站设计——哆啦A梦(5页) HTML+CSS+JavaScript 学生动漫网页设计模板下载 哆啦A大学生HTML网页制作作品 简单漫画网页设计成品...
  14. python秒换算成时分秒_Python以分钟和秒为单位读取excel日期,时分秒
  15. 大牛耗时一年最佳总结,让你的app体验更丝滑!震撼来袭免费下载!
  16. 九套精品404源码-12580code
  17. 大数据简历要点与模拟面试和项目介绍模板一
  18. vue keep-alive 缓存 不生效解决方案
  19. tmap的使用_talend使用
  20. 在CSDN的第一篇文章

热门文章

  1. 实验3 交换机基本配置
  2. 饮冰l于 2021-02-05 15:16:54 发布 1288收藏 11分类专栏: 图 文章标签: 算法 数据挖掘 机器学习 深度学习版权图 专栏收录该内容66 篇文章 23 订阅订
  3. p for trend 趋势性检验及spss实现
  4. 莫比乌斯反演问题若干
  5. lol手游一直显示服务器维护,《lol手游》Serveriscurrentlyundermaintenance解决方法 异常解决攻略...
  6. 常见SQL语句的加锁分析
  7. 房市云里雾里,58、我爱我家抱团取暖还是各怀鬼胎
  8. Python自动生成手绘、证件照、九宫格...太炫酷了(附零基础学习资料)
  9. ORA-16000: 打开数据库以进行只读访问
  10. 海青09级计算机应用,我系老师2009-2010年公开发表学术论文一览