tomcat7.x下载且编译

       最近闲来无事,down下tomcat源码,希望能近距离观摩下大拿的智慧。

       一、下载源码

       通过svn来检出tomcat的源码,通过登录tomcat官网的svn分支(http://tomcat.apache.org/svn.html),我找到一个合适的tag版本:http://svn.apache.org/repos/asf/tomcat/tc7.0.x/tags/TOMCAT_7_0_11,一般来讲tag版本都是已发布的稳定版。本人是通过eclipse的svn插件检出到eclipse目录下。目录入下图所示:


(其中output目录是本人编译过后的结果)。

二、编译源码

         eclipse支持的是ant进行编译,非常的方便。首先确定本机的ant可用(没有安装ant可以,google之),进入tomcat的源码目录运行:

        

ant ide-eclipse
这里取出的build.xml中这部分文件:

<target name="ide-eclipse" depends="deploy, extras-webservices-prepare"
          description="Prepares the source tree to be built in Eclipse">

    <!-- Copy the sample project files into the root directory -->
    <copy file="${tomcat.home}/res/ide-support/eclipse/eclipse.project" tofile="${tomcat.home}/.project"/>
    <copy file="${tomcat.home}/res/ide-support/eclipse/eclipse.classpath" tofile="${tomcat.home}/.classpath"/>

    <echo>Eclipse project files created.
Read the Building page on the Apache Tomcat documentation site for details on how to configure your Eclipse workplace.</echo>
  </target>

这里tomcat会去下载一些依赖的包,具体包的位置可以在build.properties.default中的base.path的值进行修改为合适的位置。

若ant命令运行成功,会如下显示:


此时,刷新(F5)下eclipse中的tomcat项目。

我们发现有error出现。内容类似于"Unbound classpath variable: 'ANT_HOME/lib/ant.jar'",此时,我们需要配置两个环境变量;

“window”—>"preferences"—>“Java”—>“Build Path”—>“ClassPath Variable”,在右侧增加环境变量。

1.新建“ANT_HOME”,内容填充为本机的ant安装目录。

2.新建“TOMCAT_LIBS_BASE”,内容填充为在build.properties.default中的base.path的位置。(若为windows系统,需用加补充为绝对路径)。

然后项目会自动编译,错误消失。

三、运行源码

右击这个tomcat项目,选择run as / Java Application,它会自动搜索项目中的所有main函数,你选择org.apache.catalina.startup.Bootstrap的main函数就是。系统运行成功。

可以访问:http://localhost:8080进行验证。


四、如何看源码

Tomcat 已经不是“一段代码”了。
先了解他的原理吧,再从小做起。

比如说 Tomcat,这样一步步来学习:
(1)Tomcat 是什么?HTTP 应用服务器。
那么,先去看一下简单的 HTTP 服务器如何实现。
网上有很多这样的小程序,它真的很小,一个很简单很简单的 HTTP 服务器,代码 100 - 200 行就足够。
原理:创建Socket。根据请求 URL,映射到文件系统的某个路径,然后按照一定格式返回。

(2)这个简单的服务器,不支持并发,会造成资源浪费。
那么学习下Java NIO机制(select/poll)。
如果可以的话,顺便了解下 Linux 下的 epoll 机制、Windows 下的 IOCP 机制。这些都是异步通讯的一些基础知识。

(3)Cookie、Session、Request、Response
Tomcat 通过一个 Hash 表来维护 Session,Hash Key 是 Cookie 中 JSESSIONID 这个字段。
明白这个道理后,自己就可以简单的实现这个部分。
Request、Response 的构造和传递,从AprConnector、Catalina Engine、Context、Filter、再 Dispatch 到对应的 Servlet。
理清结构,才容易看懂代码。

(4)然后,再次基础上,支持动态解析。
Tomcat 是一个 Java 应用服务器,可以将 Servlet Class 的执行结果返回给客户端。
那么如果去动态映射请求呢?Tomcat 是用 web.xml,检查 URL Pattern 来实现。比如 *.jsp 全部映射到 JspServlet 去执行。

(5)高级特性
比如配置文件、AJP协议、Tomcat集群原理,Sticky Session机制,Session 持久化,连接池,JNDI,SSO 等等。
这些相对来说比较独立。
没关系,先搞清楚原理,再研究代码,会容易很多。

先说这么多吧。这是个庞大的工程,先打好理论基础,再阅读代码。加油。

ref:http://www.zhihu.com/question/20054992

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值