tomcat是一个很优秀的轻量级的web引擎和java容器,它本身用java开发,而java是一个面向对象的语言,因此面向对象的语言开发出来的tomcat当然也就继承了面向对象的特征,tomcat还说明,OO真的使得开发变得简单,而且开发出来的产品天生就带着OO的特点,不光开发和维护本身,就连产品也OO了。反过来看apache,标准c语言开发,纯粹过程式的处理,十分符合http的处理流程,单个http请求本身的处理就是串行的过程化的,其实那个年代的东西都是这样,比如c语言,比如unix,当然还包括Tcp/ip协议族,虽然c开发的apache很稳定,性能也不错,但是它的最大的用武之地在于它对静态页面的推送,这也是http协议最基本的初衷,随着web应用日趋复杂,静态页面已经不能解决所有的问题,于是大量的动态页面出来了,像asp,php,jsp等,此时,apache本身解析并推送处理这些动态页面就有些力不从心了,毕竟这不是它的强项,即使设计了相应的模块,那么由于apache设计上的因素,对于动态页面它还是不适合的,不过由于apache性能以及稳定性的优势,它很适合做web服务器的前端,将请求定向给后端复杂的应用服务器或者动态页面容器,然后从后端接收处理后的静态元素,最终推送给客户端web浏览器。从过滤器这个web服务器的一个模块最能看出该web服务器的架构。
apache以往的过滤器都是连成一条链,分为输入过滤链和输出过滤链,前者可以将请求过滤而后者可以将推送给客户的内容过滤。所有的请求无一遗漏的要通过事先安好的所有的过滤钩子,这种方式虽然工作得很不错,但是由于页面都是静态的,所以缺点当然无法暴露,试想动态页面的处理结果,有些钩子只在特定的动态解析结果下起作用,对于大多数不起作用,如果将这个过滤钩子安装的话,很多处理都要在它里面白跑一趟,这很损失性能,或者说这很丑陋。apache新版本的做法是,实现了一个过滤器的动态安装,对于输出过滤器,在内容处理器处理完以后,也就是动态元素已经解析完毕,这个时候就可以根据解析的结果裁定要不要安装输出过滤器了,如果要的话,那么此时才安装,如果不要,就不安装了,而且,新的apache还可以为一个过滤器注册多个策略,在内容处理器的任务完毕之后根据结果裁决最终哪个策略作为过滤器被使用,如此一来就可以在某种意义上实现“每请求”的钩子过滤了,而不是以前的对所有的请求安装相同的过滤钩子,然后在钩子函数内部裁定对这个请求是否起作用。这可以说是apache从静态向动态发展的一项创举,但是apache天生的设计问题决定了它也只能走到这里,下面的主角该是tomcat了,它就是由于要解析动态jsp要求而生的。
既然如此,tomcat的优势就不言自明了,它具有OO的特性,里面的模块设计得特别人性化,特别的OO,它虽然比不上apache的强大与灵活,但是它的设计我感觉比apache的要好得多,毕竟儿子终归要超越父亲的。在tomcat中实现了“每网站”配置,就是每个网站在遵循tomcat总体的大的配置之后还可以拥有自己个性的配置,总体的配置在tomcat安装目录\conf目录下,而每网站的配置在网站\WEB_INF目录下的web.xml文件,之所以如此就是因为tomcat是以动态jsp页面解析为主的,既然是动态的,那么当然需要很多的配置策略才可以进行,最起码你要告诉解析引擎在哪里可以找到一些servlet类,而每个网站使用的类很大程度上是不同的,因此每网站配置就成了必须,如此的解决方案就是,将所有网站的共性配置放到tomcat安装目录\conf\web.xml中,将个性配置放到每网站的配置中。对于过滤,tomcat也使用了不同于apache的方式,在tomcat中,解析引擎根据每网站的配置文件为每一个网站的每一个过滤器生成了一个唯一的实例,之后针对这个网站的所有的请求都使用这一个实例,如果你想设计一个过滤器针对于所有的网站,那么很好办,只需要将过滤器的代码放到所有网站共享的shared\classes目录下即可,然后再在公共的配置文件里配置过滤器,这样的好处在于可以方便的进行不同请求间的通信和同一请求的不同过滤器之间的通信,执行引擎只需要简单得将这些通信转化为类的对象之间的通信,而类的对象之间的通信在java的OO规范中有明确的定义。tomcat之所以可以如此灵活,全在于它的OO特性,在传统的apache中,一切都是以函数调用为基础的,因此很难在执行过程的层面上形象地表达真实世界,而tomcat的执行是以对象为基础的,对象的设计如果设计的好的话必然是现实世界的写照,因此执行过程才显得如此简单而易懂。
因此可以说,apache并没有过时,它是针对http协议的,而tomcat是针对应用的,它和http协议没有冲突,如果你用tomcat作web服务器亲自处理http,那么我感觉不如用apache,如果你将tomcat作为一个serlet容器,这才是它的职责,apache和tomcat的分工是不同,apache使http协议实现的一个例子,而tomcat某种意义上是http上面的东西,为了使http更灵活,使http承载的内容更丰富,http为繁多的应用铺就了一条道路而已。简单的说,apache就是接受http请求,热后解析,最后将结果推送给客户端浏览器,这里的解析就是一个机制,具体怎么解析,http不管,而apache很多时候也是交给了可加载模块,让模块找到合适的解析者,比如tomcat,比如websphere,比如weblogic等等,这些已经不是apache本身的事情了,如果它们能如此分工的话,运行于它们之上的web网站一定很强大。
分享到:
相关推荐
2. **解压与配置**:将`apache-tomcat-11.0.0-M17`文件夹解压到所需的目录,然后配置环境变量`CATALINA_HOME`指向该目录。 3. **启动与停止**:在Tomcat的`bin`目录下,可以通过执行`startup.bat`启动Tomcat,执行`...
Tomcat的插件式架构允许开发者通过编写Valve(阀门)组件,插入到请求处理链中,实现自定义的功能。源码中可以看到Valve的生命周期管理和配置。 9. **性能优化**: 通过对源码的研究,可以了解到Tomcat如何缓存...
6. **apache-tomcat-7.0.47-memcached-java-session共享.rar**:最基础的Java序列化,使用Java内置的ObjectOutputStream和ObjectInputStream进行对象的序列化和反序列化。虽然简单,但序列化的对象通常体积较大,不...
这个版本,"apache-tomcat-8.5.81.tar.gz",是Tomcat的8.5系列的一个发行版,以tar.gz格式打包,这是一种在Unix/Linux系统中常用的压缩格式,通常用于方便下载和存储。 Tomcat是Apache软件基金会的Jakarta项目的一...
在"apache-tomcat-8.0.23-windows-x64.zip"这个压缩包中,我们可以找到以下主要组件和目录: 1. `bin`目录:包含了启动和停止Tomcat的脚本,如`catalina.bat`和`shutdown.bat`,以及管理工具,如`manager`和`admin`...
1. 下载:从Apache官方网站获取最新版本的tarball文件,如`apache-maven-3.8.5-bin.tar`和`apache-tomcat-8.5.78.tar`。 2. 解压:使用`tar -zxvf 文件名.tar`命令解压文件到指定目录。 3. 配置环境变量:编辑`~/....
而"apache-tomcat-6.0.14"则可能是一个完整的Tomcat 6.0.14安装包,包含所有必要的可执行文件和配置文件,用于在本地系统上安装和运行Tomcat服务器。 总之,Apache Tomcat 6.0.14作为Web应用服务器,与ORM框架...
总之,`apache-tomcat-8.0.47-src.zip`提供的源代码对Java开发者来说是一个宝贵的资源,它不仅可以帮助开发者理解Web服务器的内部工作,还可以为定制和优化Tomcat提供可能。通过深入研究,开发者能够提升自己的Java ...
Apache Maven 和 Apache Tomcat 是...在给定的文件中,"apache-maven-3.5.0-bin.tar.gz" 是 Maven 的安装包,"apache-tomcat-9.0.6-windows-x64.zip" 是Tomcat在Windows x64平台上的安装包,解压后即可进行安装和使用。
Apache Tomcat 是一个开源的、免费的 Web 应用服务器,它主要用于部署和运行 Java Servlet 和 JavaServer Pages(JSP)。Apache Tomcat 8.5.11 版本是其中的一个稳定版本,提供了对最新 Java EE 7 规范的支持。在这...
- 源码:如果你正在对Tomcat进行深入研究或自定义构建,理解源码中的AprLifecycleListener类和其初始化过程有助于解决问题。 - 工具:解决问题可能需要使用一些工具,如编译器(如GCC)来编译APR库,或使用系统包...
这个"apache-tomcat-5.5.26"版本是Tomcat服务器的一个具体发行版,发布于2008年,虽然现在已经相对过时,但在当时它是许多企业和开发者的首选。下面我们将深入探讨Tomcat 5.5.26的一些关键知识点。 1. **Tomcat结构...
Apache Tomcat 7.0.42 是一个广泛使用的开源Java ...在解压后的"apache-tomcat-7.0.42"文件夹中,用户可以找到包含服务器配置、web应用程序部署、日志文件等相关文件,通过这些文件可以深入了解和配置Tomcat服务器。
1. **Catalina**:这是Tomcat的核心,负责处理Servlet和JSP的生命周期,包括加载、实例化、初始化、服务和销毁等过程。 2. ** Coyote**:负责HTTP协议的处理,它是Tomcat的连接器组件,将HTTP请求转换为Java对象供...
`apache-tomcat-8.5.47-src-master.zip` 是一个包含Tomcat 8.5.47版本源代码的压缩包,主要用于开发者深入理解Tomcat的工作原理和进行定制化开发。这个版本的Tomcat是基于Master分支的,意味着它是最新的开发版本,...
- **work**:工作目录,Tomcat会在这里编译JSP页面并存储Servlet的实例化对象。 在安装和配置Tomcat时,你需要根据自己的需求修改配置文件,比如设置端口号,配置连接池,或者调整内存分配。此外,为了安全考虑,...
`apache-tomcat-6.0.29-src.zip`包含了Tomcat的全部源代码,对于开发者来说是一份宝贵的学习资源。以下是一些关键的知识点: 1. **目录结构**:解压后,你会看到如`conf`、`webapps`、`bin`等目录,它们各自有特定...
源码项目"apache-tomcat-8.5.50-src.zip"包含了Tomcat服务器的所有源代码,这对于开发者来说是极其宝贵的资源。通过查看和分析源码,你可以深入了解Tomcat的工作原理,包括请求处理、连接器、容器、部署、安全管理等...
4. **项目信息模型**:以统一的方式描述项目信息,便于自动化处理。 5. **仓库管理**:与远程或本地Maven仓库交互,下载和上传工件。 Eclipse JEE Neon 3作为开发环境,提供了以下优势: 1. **集成开发环境**:...