tomcat与apache的区别:(转自:http://blog.csdn.net/longzs/article/details/10959945)

1.apache支持静态页,tomcat支持动态的,比如servlet等,一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由tomcat来处理的。 apache可以支持php\cgi\perl,但是要使用java的话,你需要tomcat在apache后台支撑,将java请求由apache转发给tomcat处理。apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。

这两个有以下几点可以比较的: 1、两者都是apache组织开发的 2、两者都有HTTP服务的功能 3、两者都是免费的 。不同点:

Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等)
Tomcat是Apache组织在符合J2EE的JSP、Servlet标准下开发的一个JSP服务器

2.APACHE是一个web服务器环境程序 启用他可以作为web服务器使用 不过只支持静态网页 如(asp,php,cgi,jsp)等动态网页的就不行
如果要在APACHE环境下运行jsp 的话就需要一个解释器来执行jsp网页 而这个jsp解释器就是TOMCAT, 为什么还要JDK呢?因为jsp需要连接数据库的话
就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要APACHE+TOMCAT+JDK
整合的好处是:
如果客户端请求的是静态页面,则只需要Apache服务器响应请求 如果客户端请求动态页面,则是Tomcat服务器响应请求
因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销

3.apache:侧重于http server 
tomcat:侧重于servlet引擎,如果以standalone方式运行,功能上与apache等效 , 支持JSP,但对静态网页不太理想; 
apache是web服务器,tomcat是应用(java)服务器,它只是一个servlet(jsp也翻译成servlet)容器,可以认为是apache的扩展,但是可以独立于apache运行。  换句话说,apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),而这个桶也可以不放在卡车上。

tomcat与servlet区别:(摘自http://greenyouyou.blog.163.com/blog/static/13838814720112143022834/)

1.servlet的工作过程以及容器的作用

Servlet没有main()方法,他们受控与另外一个java应用,这个java应用称为容器(Container)。Tomcat就是这么一个容器,web服务器应用(如Apache)得到一个指向Servlet的请求时,服务器不是把这个请求交给Servlet本身,而是交给部署该servlet的容器。要由容器向servlet提供HTTP请求和响应,而且是由容器调用servlet的方法(doGet()和doPost())。容器运行多个servlet线程来处理对同一servlet的多个请求。(对每个请求分配一个线程,而不是每个客户)

见图(servlet01.jpg)

这里又得谈谈容器的作用了。

1)通信支持。利用容器提供的方法,web服务器能轻松的与servlet进行通信。

2)生命周期管理。容器控制着servlet的生与死。它会负责加载类,实例化,初始化,调用servlet的方法以及使servlet能够被垃圾回收。

3)多线程支持。容器会自动的接受每个servlet请求,创建一个新的java线程。针对每个请求,如果servlet已经运行完相应的HTTP方法,线程就会结束。但是我们同时也得考虑线程的安全性。

4)JSP支持。负责将JSP翻译成真正的java。

容器是如何处理用户请求的了?

1)用户点击一个链接,指向一个servlet而不是一个静态页面。

2)web服务器接到这个请求后转发给容器。容器接着创建两个对象:HttpServletRequest和HttpServletResponse。

3)容器根据请求中的URL找到相应的servlet,为这个请求创建一个线程,并把请求对象HtttpServletRequest和响应对象HttpServletResponse传递给这个servlet线程。

4)线程接下来调用service()方法,根据请求的不同,service()方法调用doGet()和doPost()方法。

5)doGet()方法生成动态页面,并把这个页面塞到响应对象里。

6)service()方法结束,随之线程结束,容器把响应对象装换为一个HTTP相应,发送给客户,然后删除请求和响应对象。

2.Servlet的生命周期

注意他的一生都是由容器控制的。servlet一生中只有一个实例出现,但是有多个线程出现。

加载类 Servlet .class文件

实例化 构造函数运行

初始化 容器调用 init() 方法(一生只调一次,并且是在第一次调用servlet的 时候执行)

service方法 servlet一生主要在这里度过

销 毁 销毁实例之前调用 destroy() 方法

可回收 等待垃圾回收等待垃圾回收

注意:当我们配置文件中指定load-on-startup 属性时,若他的值是一个大于等于0的整数,容器会在启动的时候加载这个servlet类并调用他的init方法。

3.Servlet一生中的三大重要时刻

1)init()方法:在servlet实例被创建后调用,可以覆盖此方法做一些初始化的工作,比方说得到一个数据库连接。

2)service()方法:当客户请求到来时,容器会创建一个新的线程,调用servlet的service()方法。servlet的一生基本都在这里度过。我们一般不要覆盖此方法。

3)doGet或者doPost()方法:service方法根据请求的HTTP方法,来调用doGet()或者doPost()方法。我们在开发servlet时肯定要覆盖此方法。每次运行doGet()或者doPost()方法,它都在一个单独的线程
中。

4.容器(tomcat)在启动时会做什么?

容器在启动时,会根据相应的部署文件去寻找servlet文件。

5.为什么要有init方法了?难道不能将init代码放在构造函数中么?

因为让一个普通的java类成为servlet文件时容器付出的代价也挺大,比如说内存分配。在没有调用init方法时他还是一个普普通通的java对象,只有在用户使用时才再让他称为servlet这样对资源的利
用比较合理,注意:init方法是在第一个用户调用此servlet时被触发。

【转】tomcat与apache,tomcat与servlet的区别的更多相关文章

  1. 整合apache+tomcat+keepalived实现高可用tomcat集群

    Apache是一个强大的Web服务器在处理静态页面.处理大量网络客户请求.支持服务的种类以及可配置方面都有优势,高速并且强壮.但是没有JSP/Servlet的解析能力.整合Apache和Tomcat可 ...

  2. Geronimo tomcat: 在 Apache Geronimo 插件体系中将 Apache Tomcat 这个优秀的 Web 容器整合至其中

    Apache Geronimo 灵活的插件体系将 Tomcat, OpenJPA, OpenEJB, ActiveMQ 等第三方组件集成至其中.本文从多角度介绍了在 Apache Geronimo 中 ...

  3. Tomcat负载均衡、调优核心应用进阶学习笔记(三):LNMT nginx+tomcat、LAMT apache+tomcat、session会话保持、不错的站点

    文章目录 LNMT nginx+tomcat LAMT apache+tomcat 基于mod_proxy 单节点 配置基于mod_proxy的负载均衡 基于mod_jk(需要编译安装) 单节点 配置 ...

  4. CVE-2014-0050: Exploit with Boundaries, Loops without Boundaries、Apache Commons FileUpload and Apache Tomcat DoS

    catalog . Description . Analysis . POC . Solution 1. Description MultipartStream.java in Apache Comm ...

  5. 从0开始学Java——JSP&Servlet——Tomcat和Apache的区别

    从<JSP & Servlet 学习笔记>的第一章,了解到web容器:“Web容器是Servlet/jsp唯一认得的http服务器”. 在Java中,容器的类型有多种,这里要说的是 ...

  6. Web服务器(Apache)与Servlet容器(Tomcat)

    之前一直比较迷惑Apache与Tomcat的关系,通过查询资料,有所了解,现记录于此. Apache与Tomcat 两者定位:Apache是HTTP Web服务器,Tomcat是Web容器. 有一个非 ...

  7. Type mismatch: cannot convert from javax.servlet.http.Cookie[] to org.apache.tomcat.util.http.parser.Cookie[] 的一种可能

    今天用到Cookie时,写了一个Cookie数组,发现报错“Type mismatch: cannot convert from javax.servlet.http.Cookie[] to org. ...

  8. Apache.Tomcat 调用Servlet原理之Class类的反射机制,用orc类解释

    有一个兽人类 package com.swift.servlet; public class OrcDemo { private int hp; private int mp; private int ...

  9. The Apache Tomcat Servlet/JSP Container

    1.Tomcat部署的场景分析 通常,我们对tomcat单机部署需求可以分为几种: 单实例单应用 (一个tomcat 一个web应用) 单实例多应用 (一个tomcat多个应用) 多实例单应用 (多个 ...

随机推荐

  1. pat乙级1049

    浮点型乘整型和整型乘浮点型结果不同,不知为什么. double sum = 0.0; ; i < n; i++) { cin >> a[i]; sum += a[i] * (i + ...

  2. linux 命令——7 mv(转)

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 1.命令格式: mv [选项] 源文件或目 ...

  3. C++unsigned char和char区别

    char和unsigned charchar与unsigned char都是一个字节8bit,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char( ...

  4. cout对象一些常用方法的总结

    cout.precision(n); 这个方法的功能是,设置精度为n,返还值是上一次的设置精度. #include <iostream> using namespace std; int ...

  5. 换了台电脑tomcat自己运行没问题,eclipse中配置tomcat开启了浏览器却404错误解决

    如果发现下图中 apache tomcat 的Overview 视图中发现 Server Locations 灰色显示 那么首先需要配置好TomCat的TOMCAT_HOME 和 CATALINA_H ...

  6. C++的XML编程经验――LIBXML2库使用指南

    C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...

  7. Oracle数据库学习(四)

    11.创建表 crate table tab1(f_id number not null,f_a varchar2(7) not null,f_b number(6,2) not null): 主键: ...

  8. IE console报错

    需要注意的是,使用console对象查看对象信息,在IE8浏览器下未打开开发人员工具(F12)的情况下 会报'console'未定义错误. 解决办法:1.打开开发人员调试工具(F12)        ...

  9. Ubuntu18 中文乱码 问题 解决

    之前租的服务器没有中文乱码的问题,最近重装了一下系统, 出现了中文乱码, 以下是解决方案: 输入locale查看当前的语言是否是中文 root@ubuntu:~# locale LANG=zh_CN. ...

  10. 关于 composer 的一些坑

    发布自己的『包.库』至 https://packagist.org 却一直不能引入 网络上所有关于新建composer包的教程文章统统只提到了版本可能会影响无法 require 深深的坑哭了我们这些入 ...