`
totoxian
  • 浏览: 1095857 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

Tomcat的对象化处理和apache的统一式处理

 
阅读更多

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网站一定很强大。

分享到:
评论

相关推荐

    tomcat 启动报APR based Apache Tomcat Native library not found

    - 源码:如果你正在对Tomcat进行深入研究或自定义构建,理解源码中的AprLifecycleListener类和其初始化过程有助于解决问题。 - 工具:解决问题可能需要使用一些工具,如编译器(如GCC)来编译APR库,或使用系统包...

    apache-tomcat-8.5.81.tar.gz

    Apache Tomcat是一个开源的软件应用服务器,主要用于运行Java Servlets和JavaServer Pages(JSP)。这个版本,"apache-tomcat-8.5.81.tar.gz",是Tomcat的8.5系列的一个发行版,以tar.gz格式打包,这是一种在Unix/...

    apache-tomcat-11.0.0-M17-windows-x64.zip

    Apache Tomcat 是一款广泛应用的开源软件,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。在本文中,我们将深入探讨Apache Tomcat 11.0.0-M17这一版本,它是针对Windows 64位操作系统的。这个...

    apache-tomcat-8.5.68-src

    Tomcat的插件式架构允许开发者通过编写Valve(阀门)组件,插入到请求处理链中,实现自定义的功能。源码中可以看到Valve的生命周期管理和配置。 9. **性能优化**: 通过对源码的研究,可以了解到Tomcat如何缓存...

    apache-tomcat-6.0.14.zip_apache tomcat 6.0.14_apache tomcat-6.0.

    Apache Tomcat 6.0.14 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,专门用于运行Java Web应用程序。这个版本的Tomcat是Apache Tomcat系列的一个具体迭代,包含...

    apache+tomcat+memcached

    - 重启Apache和Tomcat服务,确保配置生效。 - 测试集群环境,验证Session在多个Tomcat实例间的正确同步。 总结:Apache+Tomcat+Memcached集群的搭建,旨在优化Web服务性能,通过Apache处理静态内容,Tomcat处理...

    apache-tomcat-5.5.33

    1. **Catalina**:这是Tomcat的核心,负责处理Servlet和JSP的生命周期,包括加载、实例化、初始化、服务和销毁等过程。 2. ** Coyote**:负责HTTP协议的处理,它是Tomcat的连接器组件,将HTTP请求转换为Java对象供...

    apache-tomcat-7.0.42

    7. **错误页面和异常处理**:Tomcat 7支持在服务器端定义全局的错误页面,这样当应用程序抛出未捕获的异常时,可以统一显示定制的错误信息,提升用户体验。 8. **连接池管理**:内置的JDBC连接池(Catalina JDBC ...

    apache-tomcat-7.0.47-memcached-各种序列化策略-session共享

    6. **apache-tomcat-7.0.47-memcached-java-session共享.rar**:最基础的Java序列化,使用Java内置的ObjectOutputStream和ObjectInputStream进行对象的序列化和反序列化。虽然简单,但序列化的对象通常体积较大,不...

    apache-tomcat-5.5.26

    10. **国际化与本地化**:Tomcat支持多种语言,开发者可以通过`Resource Bundle`实现应用的国际化和本地化。 11. **管理工具**:Tomcat自带了一个基于Web的管理界面,管理员可以在此界面中管理应用、查看日志、监控...

    TOMCAT+APACHE集成以及session复制

    在IT行业中,尤其是在Web服务器配置和优化领域,TOMCAT和APACHE的集成以及session复制是两个关键概念。本文将详细讲解这两个主题,并提供一个基于实际操作的demo概述。 首先,TOMCAT是一款流行的开源Java Servlet...

    apache-tomcat7

    Apache Tomcat7是一款广泛应用的开源Java Servlet容器,它实现了Java EE Web应用程序的Servlet、JSP(JavaServer Pages)和EL(Expression Language)规范。Tomcat7是Tomcat服务器的一个主要版本,提供了对Java EE 6...

    apache-tomcat-8.5.11-src

    Apache Tomcat 是一个开源的、免费的 Web 应用服务器,它主要用于部署和运行 Java Servlet 和 JavaServer Pages(JSP)。Apache Tomcat 8.5.11 版本是其中的一个稳定版本,提供了对最新 Java EE 7 规范的支持。在这...

    apache-tomcat-8.0.50

    4. **项目信息模型**:以统一的方式描述项目信息,便于自动化处理。 5. **仓库管理**:与远程或本地Maven仓库交互,下载和上传工件。 Eclipse JEE Neon 3作为开发环境,提供了以下优势: 1. **集成开发环境**:...

    apache-tomcat-6.0.16

    Apache Tomcat 6.0.16 是一个广泛使用的开源软件,主要作为Java Servlet和JavaServer Pages(JSP)的容器。它由Apache软件基金会维护,是实现Java EE Web应用程序部署规范的重要组成部分。Tomcat以其轻量级、高效和...

    apache-tomcat-5.5.29

    8. **国际化与本地化**:Tomcat支持多语言环境,可以在web应用中通过Locale对象和资源包实现。 9. **错误处理**:Tomcat提供定制化的错误页面,通过配置error-page元素在web.xml中定义。 10. **集群与负载均衡**:...

    apache-tomcat-6.0.18源码

    - `Catalina`:Tomcat的核心组件,负责管理Servlet容器和处理请求。 - `Jasper`:这是Tomcat的JSP引擎,用于编译和执行JSP页面。 - ` Coyote`:处理HTTP连接的组件,负责接收和响应HTTP请求。 - `Apr`(Apache ...

    apache-tomcat-8.0.47-src.zip

    - **Servlet** 和 **JSP** 的生命周期:如何初始化、服务、销毁,以及如何与请求和响应对象交互。 - **Connector** 和 **Engine**:Tomcat如何接收和路由HTTP请求。 - **Context**、**Host** 和 **Wrapper**:这些是...

    apache-tomcat-6.0.29-src.zip

    4. **生命周期管理**:在`org.apache.catalina`包下,你可以看到关于容器对象(如Context、Host、Engine)的生命周期管理代码,包括初始化、加载、启动、停止和卸载等阶段。 5. **JSP编译**:Jasper负责将JSP文件...

Global site tag (gtag.js) - Google Analytics