tomcat和apache

1、tomcat和apache的区别与联系

     1)apache是web服务器,只支持静态网页;tomcat支持动态的,如servlet等。一般是用apache+tomcat,apache只是作为一个转发器,对jsp的处理是由tomcat来处理的。

     2)apache是普通服务器,本身只支持html页面,可以通过插件来支持php,还可以与Tomcat连同,通过apache来访问tomcat的资源,从而支持asp、jsp等动态网页。

     3)apache和tomcat的整合使用:

           如果客户端请求的是静态页面,则只需要apache服务器做响应;如果请求的是动态页面,则是tomcat服务器做响应,将解析的jsp等动态网页代码解析后传回给apache服务器,经由apache返回给浏览器。

          为什么要这样组合呢?jsp等动态网页是服务器解释的,Tomcat只做动态代码解析,apache回传解析好的静态代码,apache+tomcat整合可以减少tomcat的服务开销。

    4)apache是由C语言实现的,支持各种模块和特性通过扩展核心功能来实现;tomcat是由java开发的,更好的支持servlet和jsp;

    5)apache是web服务器,web服务器传送页面使浏览器可以浏览,文本服务器专门处理HTTP请求;tomcat是运行在apache上的应用服务器,应用服务器是通过协议来为应用程序提供商业逻辑的。

    6)tomcat完全可以替代apache的功能,但是apcahe解析静态页面的速度很快,所以在能用apache的情况下还是优先选择apache。

 

2、应用服务器和web服务器

应用服务器是用来处理业务逻辑的,web服务器则主要是让客户可以通过浏览器进行访问,处理静态页面的。web服务去通常比应用服务器简单。web服务器只提供web服务功能,而应用服务器则提供整个企业级解决方案。

 

3、apache整体分析

1)目录结构:

       bin - 程序命令目录

       conf - 配置文件目录

               http.conf:主配置文件
               http-autoindex.conf
               http-dav.conf:dav支持配置
               httpd-languages.conf #语言支持配置 
               httpd-manual.conf 
               httpd-mpm.conf #服务器池管理。如选择apache模式及配置连接数。 
               httpd-multilang-errordoc.conf
               httpd-ssl.conf     #SSL支持配置
               httpd-userdir.conf 
               httpd-vhosts.conf #虚拟主机配置(实例如下)            

NameVirtualHost *:80  #表示使用基于名称的虚拟主机配置。*表示本机所有IP,可以改成具体IP 
<VirtualHost *:80> #定义一个虚拟主机,监听本机所有IP地址的80端口     
   ServerAdmin webmaster@dummy-host.example.com #管理员信箱      
   DocumentRoot "/usr/local/apache-2.2.22/docs/dummy-host.example.com" #站点目录      
   ServerName dummy-host.example.com   #域名     
   ServerAlias www.dummy-host.example.com #别名
    ErrorLog "logs/dummy-host.example.com-error_log" #错误日志
    CustomLog "logs/dummy-host.example.com-access_log" common #访问日志  
</VirtualHost>  

       htdocs - 编译安装时的站点目录

       logs - 默认日志文件存放位置

              error_log: 错误日志
              access_log:访问日志
              httpd.pid:记录主进程号

       modules - 模块目录,各种扩展功能的插件编译后的模块都在这里

2)apache的层次结构:分5层结构。

操作系统平台功能层:apache是运行在os上的应用程序,必须使用os本身提供的底层功能,比如进程和线程、进程和线程的通信,网络套接字通信和文件操作等。但是,apache是跨平台的。

可移植运行库层(APR):是os的适配层,通过ARP实现apache的跨平台。不同的操作系统提供的底层API不同,也就是实现同一个操作所用的函数方法不同,这时在Apache和操作系统中间设计一个APR,这样APR根据不同的操作系统分别实现一个相同的功能,这样apache可以调用APR的提供的一个API接口。这样,apache在处理与系统相关的事务时,就直接去访问APR的同一api接口,再由APR调用不同os的底层服务。

核心功能层:实现apache的基本功能和核心功能,包括读取和响应HTTP请求、处理HTTP协议。核心功能层包含:核心程序、核心模块。

       核心程序主要实现apache的基本功能:启动和终止apache、处理配置文件、接受和处理HTTP连接、读取HTTP请求并对请求进行处理、处理HTTP协议;
       核心模块是可以有也可以没有的,但是有2个模块是必须要有的:mod_core mod_so

                 mod_core:负责处理配置文件中的大部分配置指令,并根据这些指令运行apache;
                 mod_so:负责在需要的时候动态加载其余模块,缺少该模块其他模块就无法加载;

      关系:apache最基本的核心功能由apache核心完成,而核心无法提供的功能则又模块提供。

可选功能层:Apache有很多模块,包括mod_ssl mod_proxy mod_perl ;apache的文件都是C语言开发的,如果有perl脚本写的模块,必须把mod_perl 模块加载,否则不能运行

第三方支持库:apahe的一些模块会使用到第三方的开发库,比如 mod_ssl 使用了 openssl;mod_perl 使用了perl 开发库,这些库并不属于apache,是第三方库。

3)apache的核心组件

包括:配置文件组件(http_config)、进程并发组件(MPM)、连接处理组件(http_connection)、HTTP协议处理组件(http_protocol)、HTTP请求处理组件(http_request)、HTTP核心组件(http_core)、核心模块组件(mod_core)。

4)apache运行流程

启动过程:apache的启动包括两个阶段,高权限启动阶段和低权限运行阶段,通常称之为两阶段启动方式。

apache中的绝大部分内存都是基于内存池分配的,在apache启动时必须首先初始化内存池资源;然后apache会读取和解析apache的配置文件(httpd.conf) ;在启动的最后阶段,apache将通过调用ap_mpm_run函数并将控制权交给MPM,只有当MPM执行失败或结束后才把控制权交还给主程序,而且MPM在处理HTTP连接时用的权限是普通用户的权限,这样会避免黑客攻击apache会获取root权限。

MPM的并发方式(可通过with-mpm参数指定):

        prefork:基于非线程模型,纯进程并发,没有线程,适用于那些没有线程库或者不想使用线程的服务器。在所有情况下都很安全,对运行非线程安全(non-thread-safe)模式的软件如PHP,它是唯一的安全选择。prefork用当度的子进程来处理不同的请求,进程间彼此独立,这也使得其成为最稳定的MPM之一。确定也在于此,由于每一个请求都会产生一个新的进程,导致系统资源消耗很快,在并发量较大的时候,问题就更加突出。

       worker:基于线程模式,在worker模式下,有一个唯一的父进程(控制进程),这个父进程会根据需要生成若干子进程,每个子进程会有一个监听线程和若干服务线程。监听线程负责监听客户端请求并将请求交给服务线程处理。

链接处理:在收到client端的HTTP请求并建立socket链接后,apache就获取了client对应的ip,通过这个ip可以确定该ip地址对应的虚拟主机族。一旦client与apache建立链接,请求数据将被读取出来,然后HTTP_PROTOCOL 模块将开始对该报文进行解析。读取的请求信息会保存在数据结构 request_rec 中。

请求处理:对于HTTP报文,apache调用ap_process_request函数对请求进行实质处理,请求处理包括3个阶段:

         请求解析阶段:URL字符转义(它就要将%xx 格式的字符串重新还原成原来的字符串)、优化URL等
         安全处理:身份认证、用户授权等
         请求准备阶段:apache在处理客户请求的资源前,先要确定用户请求资源的类型,然后再进行内容生成

内容生成:请求处理最重要的内容就是响应内容生成,对于静态的HTML文件直接读取文件返回给客户端就可以了;对于一些脚本还有动态数据库文件,需要调用对应的处理器生成客户请求的响应内容,生成内容会进入过滤器进行内容过滤(自己设置过滤的内容和规则),通过最后一个过滤器(网络过滤器后),把内容发送到网络,最后传输到客户端,并在浏览器中显示。

 

4、tomcat整体分析

1)目录结构

       bin - tomcat运行相关的脚本文件命令

       conf - 存放tomcat服务器的各种全局配置文件,重要的是server.xml和web.xml

       logs - 存放tomcat执行的日志文件

       webapps - tomcat的主要web发布目录,默认情况下。可修改成自己希望的路径

       work - 存放编译后产生的class文件

       temp - 临时活页夹,Tomcat运行时候存放临时文件用的

2)web应用程序的目录结构(helloapp为例)

        /helloapp:文本应用的根目录,所有的web页面都是在这个目录下

        /helloapp/WEB_INF:存放该web应用发布时的描述文件web.xml

        /helloapp/WEB_INF/class:存放各种class文件

        /helloapp/WEB_INF/lib:存放web应用所需要的jar文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值