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源码阅读的更多相关文章

  1. Tomcat源码阅读(二)初始化

    近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以 ...

  2. tomcat源码阅读之过滤器

    一.Servlet过滤器: 1.介绍: Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request ...

  3. tomcat源码阅读之SingleThreadModel

    一.接口简介: 实现了SingleThreadModel接口的servlet类只能保证在同一时刻,只有一个线程执行该servlet实例的service方法,在tomcat实现中会创建多个servlet ...

  4. tomcat源码阅读之载入器(Loader)

    一.Java类的载入器: 双亲委派模型: 1.JVM提供了三种类型的类加载器:引导类载入器(bootstrap class loader).扩展类载入器(extension class loader) ...

  5. tomcat源码阅读之BackupManager

    一. 配置: <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOpti ...

  6. tomcat源码阅读之安全机制

    一.领域(Realm): 1.Principal接口代表角色信息,包含了三个成员:用户名.密码.role列表(以逗号分隔),对应了tomcat-users.xml文件中一行user信息: Generi ...

  7. tomcat源码阅读之集群

    一. 配置: 在tomcat目录下的conf/Server.xml配置文件中增加如下配置: <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. clas ...

  8. tomcat源码阅读之默认连接器

    默认连接器 一.UML图: 1.所有的连接器都要实现Connector接口,必须创建Request对象和Response对象,httpConnector作为默认连接器,肯定也是要实现Connector ...

  9. tomcat源码阅读之部署器

    我们知道web应用是用Context实例表示的,而Context是部署到Host实例中的,因此tomcat的部署器是关联的Host实例.Context实例可以用WAR文件部署,也可以把整个web应用的 ...

随机推荐

  1. hdu2128之BFS

    Tempter of the Bone II Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 98304/32768 K (Java/ ...

  2. ORACLE EXP命令

    本文对Oracle数据的导入导出 imp ,exp 两个命令进行了介绍, 并对其对应的參数进行了说明,然后通过一些演示样例进行演练,加深理解.文章最后对运用这两个命令可能出现的问题(如权限不够,不同o ...

  3. ural 1018 Binary Apple Tree(树形dp | 经典)

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  4. php获得访问来源(手机wap访问、电脑web访问)

    为了更好的用户体验,本主题默认支持wap和web两种访问样式,wap访问将不包含任何脚本.样式也是重新撰写,不支持更多页面,只支持首页.详情页, 评论框.登录等内容将陆续更新到wap内容里.如果想测试 ...

  5. 【转】Angularjs Controller 间通信机制

    在Angularjs开发一些经验总结随笔中提到我们需要按照业务却分angular controller,避免过大无所不能的上帝controller,我们把controller分离开了,但是有时候我们需 ...

  6. PHP 解决未定义变量报错

    在PHP中 有时候会出现 Notice: Undefined index: sid in D:\Apache Group\Apache2\htdocs\php_mobile\mobile\chao\s ...

  7. Convention插件的使用(会涉及content目录,jsp必须放入这个下面才能映射成功基于注解的配置)

    http://blog.csdn.net/zclandzzq/article/details/7107816

  8. iOS-NSSDate的使用

    取当前时间的秒数 NSTimeInterval time = [[NSDate date] timeIntervalSince1970];long long int date = (long long ...

  9. IOS应用程序生命周期&启动周期函数

    —程序的生命周期         a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程         b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...

  10. iOS自动布局之autoresizingi

    对于iOS的app开发者来说,不会像Android开发者一样为很多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,但是从设计模式上来说这不是好的做法.而且也还有一些问题,如iPhone5的适配, ...