tomcat源码阅读
1 工具准备
需要SVN、Maven、JDK、Eclipse、Eclipse M2插件
2 下载源码及发布包
源码在这里:http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_29
发布包在这里:http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.29/bin/
说明:下载发布包这个步骤是可选的,好处是免得从源码再自行构建,节省时间;另外发布包里的配置文件等,后续可以直接拿来用,比较方便
3 整理目录
前面下载得到了源码和发布包,现在要把它们放到同一个目录里,再整理一下,方便后面把它转化成eclipse工程,毕竟后续读源码,以及调试,都要在eclipse里完成
新建一个单独的目录,叫tomcat-7.0.29,然后把刚才下载的源码和发布包都放进去,源码目录重命名为code;发布包目录重命名为launch
得到的目录结构见下图:
一会就会把这个目录导入eclipse,变成可运行,可调试的eclipse工程
4 转换成maven工程
将附件pom.xml放入目录,与code、launch目录平行
得到的目录结果见下图:
说明:这也不是必须的,只是个人习惯
5 导入eclipse
导入成功以后,eclipse里的工程目录结构如下图:
接下来就可以在eclipse里运行和调试tomcat了,也可以随意修改源代码,或者自己添加测试用例
6 启动tomcat
Tomcat启动入口类是:org.apache.catalina.startup.Bootstrap
平时我们用发布包启动Tomcat一般是用脚本startup.bat或startup.sh,其实就是在脚本中先处理启动参数和系统变量,然后调用上面这个入口类
所以在eclipse里启动,我们也就是直接执行这个类的Main方法,只是要模拟脚本,设置一下启动参数和系统变量
6.1 方法1
在VM arguments中,拷贝以下参数:
-Dcatalina.home=launch -Dcatalina.base=launch -Djava.endorsed.dirs=launch/endorsed -Djava.io.tmpdir=launch/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=launch/conf/logging.properties
如下图:
6.2 方法2
直接拷贝一个启动脚本,拷贝到工程目录下,结构如下图:
然后只需要直接在start-tomcat7.launch上右键点击,Run就可以
6.3 启动信息及验证
启动效果如下图:
眼熟,和普通的用脚本启动,还有启动嵌入式tomcat的信息都是一样的
最后用浏览器访问:http://localhost:8080/examples/
7 Tomcat7核心架构
包名 |
作用 |
javax.* |
各种JSR的API,如JSP、Servlet、EL等 |
org.apache.catalina |
tomcat自身架构 |
org.apache.coyote |
http、ajp协议实现 |
org.apache.el |
EL规范实现 |
org.apache.jasper |
JSP规范实现 |
org.apache.juli |
日志 |
org.apache.naming |
JNDI实现 |
org.apache.tomcat |
工具包、XML解析器等 |
tomcat源码阅读的更多相关文章
- Tomcat源码阅读(二)初始化
近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...
- tomcat源码阅读之过滤器
一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...
- tomcat源码阅读之SingleThreadModel
一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...
- tomcat源码阅读之载入器(Loader)
一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...
- tomcat源码阅读之BackupManager
一. 配置: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOpti ...
- tomcat源码阅读之安全机制
一.领域(Realm): 1.Principal接口代表角色信息,包含了三个成员:用户名.密码.role列表(以逗号分隔),对应了tomcat-users.xml文件中一行user信息: Generi ...
- tomcat源码阅读之集群
一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...
- tomcat源码阅读之默认连接器
默认连接器 一.UML图: 1.所有的连接器都要实现Connector接口,必须创建Request对象和Response对象,httpConnector作为默认连接器,肯定也是要实现Connector ...
- tomcat源码阅读之部署器
我们知道web应用是用Context实例表示的,而Context是部署到Host实例中的,因此tomcat的部署器是关联的Host实例.Context实例可以用WAR文件部署,也可以把整个web应用的 ...
随机推荐
- NDK Dev
1.cdt下载(http://www.eclipse.org/cdt/downloads.php) cdt-8.8.0.zip http://mirrors.opencas.cn/eclipse//t ...
- BA/PM Competency Module
No Competency Description BA Weight% PM Weight% 1 Business Analysis:BA Track Maps process flows, ...
- OpenCV 最小二乘拟合方法求取直线倾角
工业相机拍摄的图像中,由于摄像质量的限制,图像中的直线经过处理后,会表现出比较严重的锯齿.在这种情况下求取直线的倾角(其实就是直线的斜率),如果是直接选取直线的开始点和结束点来计算,或是用opencv ...
- 只有在配置文件中或 Page 说明会 enableSessionState 至 true 时刻,能够使用会话状态。另外,还要确保应用程序配置 // 段包含 System.Web.SessionSta
首先,弄清楚我们的目的,我的目标是验证用户登录.那是,Session["userName"]!=null 在ok该 起初,我是这么写的,结果给出,提示如果上述错误标题,在调查的很长 ...
- spring mvc DispatcherServlet详解之interceptor和filter的区别
首先我们看一下spring mvc Interceptor的功能及实现: http://wenku.baidu.com/link?url=Mw3GaUhCRMhUFjU8iIDhObQpDcbmmRy ...
- mysql 安装配置详解
作为演示,是不可能完全模拟到生产环境的,因此不可能尽善尽美.由于是在virtualbox里面的centos6.5最小化安装版中安装配置mysql,因此前期的准备工作有很多,那么开始吧.添加一块硬盘,用 ...
- C#Socket编程socket.Connect权限出错问题及解决
最近使用Vs2010编写Socket程序,客户端在调用socket.Connect()时,总是出现: 请求“System.Net.SocketPermission, System, Version=4 ...
- listActivity和ExpandableListActivity的简单用法
http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...
- 惠普 Compaq 6520s 无线开关打不开
问题描述:键盘上面的无线开关怎么按都打不开,始终是出于黄色的状态 解决方法:尝试恢复bios默认值测试: 开机不停点击F10进入bios,选择File选项,选择Restore Defaults-- ...
- ASP.NET Excel数据导出数据库
/// <summary> /// 根據gridview導出excel /// </summary> /// <param name="ctl"> ...