怎么读 Tomcat 源码?
因此,我写这篇文章来解答一下,也希望本文能达到抛砖引玉的作用。
要读 Tomcat 的源码,必须要提一个大神,那就是 James Duncan Davidson,这个老头不光是 Tomcat 的创始人,还是 Ant 的创始人。
曾有人问 James Duncan Davidson,Tomcat 为什么会如此流行?他回答源于Tomcat 是开源的,任何人都可以使用并修改它。
其实,只需去看看 Tomcat 的发展历史「见下图」,便会知道它是如此牛逼,历史之悠久。
关于为什么叫 Tomcat?我还真去查阅了一些资料,Tomcat之父说,他当初取这个名字是为了让它未来能出现在 O'Reilly 书的封面上。
现在看起来,似乎他当年的想法并未实现,但这只小猫却坚持不懈的服务在全球成千上万的服务器上。
现在 Tomcat 已经托管于 Github 上面,你可以去上面直接下载。
当你下载完文件后,在主目录下会发现了一个文件 build.xml ,对于编码阅历比较少的同学很少知道了它了,这便是 Ant 构建项目的文件。关于 Ant 的更多细节,我在这里就不细说了,感兴趣的同学可以去谷歌查阅一下资料。
为什么 Tomcat 会选用 Ant 来构建?在我看来,一是它们都出自 James Duncan Davidson 之手,二是在那个时代没有比 Ant 更好用的自动化构建工具。
你下载完 Tomcat 下来,需要搭建 Ant 的环境,这些操作自行谷歌吧。。。
你查看 build.xml 文件,你会发现它默认给我提供了自动构建 IDEA、Eclipse及 NetBeans 的命令,我这里主要讲怎么在 IDEA 中构建。
首先,执行命令 ant ide-intellij 。
接着,便会出现如下结果。
最后,你打开 tomcat-build-libs 目录,便会发现所有的依赖包都放在这里。
这样怎么导入包,就不用我教你了吧,如果你为了方便,也可以打开 阅读原文 的链接,来访问我已经提供好的 Maven 引入方式,在分支 read 上面,查看 pom.xml 。
需要注意的是,你需要配置一下有一个包的依赖路径「见下图」。
好了,接着来说这位读者遇到的几个问题吧。
1、 不知道启动入口在那里?
org.apache.catalina.startup.Bootstrap.java
需要配置一下 VM 启动参数。
-Dcatalina.home=D:\open-source\tomcat -Dcatalina.base=D:\open-source\tomcat -Djava.endorsed.dirs=D:\open-source\tomcat\endorsed -Djava.io.tmpdir=D:\open-source\tomcat\temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=D:\open-source\tomcat\conf\logging.properties -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djdk.tls.ephemeralDHKeySize=2048
2、程序是运行了,但访问 8080 首页报 500 错误,不知道为什么?
我查看了一下,原来是没有引入 Jsp 页面编译引擎。在 org.apache.catalina.startup.ContextConfig.java 页面的 configureStart() 方法加入如下图所示代码。
最后,便能正常编译了。
页面也能正常返回了。
这几个难住初学者的问题,在一个老手面前可能就是几分钟的事情,不管这个问题难好,简单也好,只要我知道的,我始终愿意帮助那些初学者,毕竟大家都是这么走过来的。
让我感到很高兴的是,这位读者知道,他耽误了我的时间,发了一个红包,表示感谢,说实话,我挺高兴的,不是钱的事,在于他知道从别人哪里获取不是理所应当。
关于怎么玩 IDEA ,我之前也写过一篇文章《谈谈我与 Intellij IDEA 的故事》,可进行查阅相关快捷操作。
好了,今天的分享就到了这里了,后面再给大家分享 Tomcat 内部的实现细节。
原文发布时间为:2018-11-02
本文作者: Java面试那些事儿
本文来自云栖社区合作伙伴“ Java面试那些事儿”,了解相关信息可以关注“Java面试那些事儿”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Keras文本分类实战(下)
在上一节Keras文本分类实战(上),讲述了关于NLP的基本知识。这部分,将学会以不同方式将单词表示为向量。 词嵌入(word embedding)是什么 文本也被视为一种序列化的数据形式,类似于天气数据或财务数据中的时间序列数据。在之前的BOW模型中,了解了如何将整个单词序列表示为单个特征向量。下面将看到如何将每个单词表示为向量。这里有多种方法可以对文本进行向量化,比如: 每个词语(word)表示的词语(words)作为向量 每个字符(character)表示的字符(characters)作为向量 N-gram单词/字符表示为向量 在本教程中,将使用单热编码和单词嵌入将单词表示为向量,这是在神经网络中处理文本的常用方法。 独热码(one-hot encoding) 将单词表示为向量的第一种方式是创建独热码,这是通过将词汇长度的向量与语料库中的每个单词的条目组合一起来完成。通过这种方式,对于每个单词,只要它在词汇表中存在,就会将该单词在相应的位置设置为1,而向量中其它的位置设置为0。但这种方式可能为每个单词创建相当大的向量,且不会提供任何其他信息,例如单词之间的关系。假设有一个城市列表...
- 下一篇
使用的ssm框架 Java 上传图片到专有云OSS
测试上传图片到阿里云
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,CentOS7官方镜像安装Oracle11G
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境