Apache和Tomcat以及Struts的关系以及部分相关概念

之前主要从事C/S项目开发,没有比较系统的学习、了解B/S项目底层的内容,对Apache和Tomcat以及Struts他们之间的关系一直搞不太清楚,只有一些模棱两可的概念,今天根据网络的一些回答,来进一步了解其之间的关系(如有错误,请大家指正!!!)。

首先,我们来看一下三者的定义:

Apache:一看到这个,我首先想到的是Apache软件基金会(Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织,其下有很多被我们熟知的项目,例如我们所熟知的SVN、Maven、Hadoop、Http Server、Tomcat、ZooKeeper、Struts等。

image

而我们常说的Apache其常指的是Apache Http Server(后面简称Apache)。Apache是WEB服务器,可以作为独立的WEB服务器来运行,但是不能解释JAVA程序;它是普通服务器,只支持HTML(静态网页),可以通过插件支持应用发布。

常用的Web服务器主要包括:

1、Apache Http Server(由Apache提供)

2、IIS(由Microsoft提供)

3、nginx(由NGINX,Inc。提供,发音类似于“Engine X”)

4、GWS(由谷歌提供,谷歌网络服务器的简称)

Tomcat:是应用(java)服务器,是一个开放源代码、运行Servlet和JSP Web应用软件的基于Java的Web应用软件容器,可以用于发布动态网页。

常用的应用服务器主要包括:

1、WebLogic(Oracle 甲骨文公司)

2、Tomcat(Apache提供)

3、JBoss (RedHat)

上面提到了Apache和Tomcat一个是WEB服务器一个是应用服务器,那什么是WEB服务器,什么又是应用服务器呢?

严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器。而应用程序服务器可以定义为“作为服务器执行共享业务应用程序的底层的系统软件”, 就像文件服务器为很多用户提供文件一样,应用程序服务器让多个用户可以同时使用应用程序(通常是客户创建的应用程序)。

现如今,WEB服务器和应用服务器的界限已经没有那么清晰,WEB服务器可以通过插件实现应用服务器的功能(例如Apache可以通过插件支持动态网页,IIS可以通过插件发布ASP.NET应用程序等);大部分应用服务器也增加了对HTTP协议的支持(仅仅是支持),但是两者的侧重点是不一样的,Web主要负责服务器传送页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用的方法(methods)。确切一点,Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供商业逻辑(business logic)。

对于一些情况,可以将Apache和Tomcat整合使用:如果客户端请求的是静态页面,则只需要Apache服务器响应请求;如果客户端请求动态页面,则是Tomcat服务器响应请求;因为jsp是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销 。

Apache和Tomcat区别可以总结一下几点:

  1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展。

  2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Apache不能解释java程序(jsp,serverlet)。

  3. Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)

  4. 两者都是一种容器,只不过发布的东西不同:Apache是html容器,功能像IIS一样;Tomcat是jsp/servlet容器,用于发布jsp及java的,类似的有IBM的webshere、EBA的Weblogic,sun的JRun等等。

  5. Apache和Tomcat是独立的,在通一台服务器上可以集成。

打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上。

Struts:其为一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着非常大的变化,但是相对于WebWork,Struts 2的变化很小。

在之前,Struts2 可谓是风光无限啊,Struts2 + Spring + Hibernate 三大框架一起组成了 "SSH"— Java Web 框架三剑客。但是慢慢的,因为漏洞以及新技术的发展等原因,在国内,慢慢的Struts2 已被 Spring MVC/ Spring Boot 所取代,Hibernate 也逐渐被 MyBatis/ Spring Data JPA 所取代,现在已经是 SSM的天下了。

参考:

https://blog.csdn.net/weixin_45738218/article/details/108297550

https://baike.baidu.com/item/Struts%202/2187934?fromtitle=Struts2&fromid=10711345&fr=aladdin

https://baijiahao.baidu.com/s?id=1666798824409081240&wfr=spider&for=pc

https://www.cnblogs.com/piaoyang2087/articles/11297695.html


扩展阅读(题外趣点,与上面内容无关):

1、个人比较好奇,像Apache做的也是比较牛叉的了,其资金来源是啥呢?总不至于这群人为了梦想不吃不喝吧,网上看了一下,Apache的主要资金来源于捐助,并且其根据贡献还分为了白金赞助商、黄金赞助商等等。

image

2、Apache、Tomcat这些名字都是咋来的呢,其有啥含义(来源于知乎:https://www.zhihu.com/question/68213723)。

如果你是从事于计算机软件相关工作的人,那你肯定经常见到Apache这个单词,也应该知道Tomcat这个服务器软件的名字,Catalina可能陌生一点,但你在配置tomcat时,一定会添加一个环境变量,然后指向tomcat的安装路径,这个环境变量的名字就叫Catalina_Home,进入tomcat安装目录,里面很多文件名字也叫Catalina。那么这三个单词作为软件的名字有什么含义、相互之间又是什么关系呢?

上世纪八十年代,当互联网开始在美国大学流行的时候,美国计算机名校伊利诺伊大学香槟分校(UIUC)的国家超级计算应用中心(National Center for Supercomputing Applications, NCSA)组织了一些研究生开始编写基于HTTP通信协议的服务器端和客户端程序。客户端端程序叫做mosaic,是第一个被普遍使用的网页浏览器,也是Netscape(网景)浏览器的前身,之后演变为Mozilla Firefox。而服务器端程序就是最早的Web服务器软件之一,名叫NCSA HTTPd,它完整地实现了HTTP协议,整个实验获得了成功。然而伊利诺伊大学香槟分校也许仅出于学术研究目的,在实验成功后开发工作就没有继续下去,研究小组也随之解散,但他们将这两个软件开源,其代码可以自由下载修改并发布。

此时的互联网对HTTP服务器软件的需求越来越大,公开源代码的NCSA HTTPd成了进一步发展的极好起点。很多研究者不断地给它添加功能、增加代码,并对不断出现的Bug打补丁。但因为缺乏规划和管理,出现了越来越多的重复劳动,随之而来的则是越多的补丁带来越多的Bug。1995年2月,为解决这种单打独斗的现象,8名志同道合的开发者决定成立一个小组,一起重写整个NCSA HTTPd程序,发布一个基于NCSA HTTPd的可靠的服务器软件。开发工作完成后,他们将软件命名为Apache,全称Apache HTTP Server。Apache本是美洲原住民印第安人一支部落的名字,这个部落因为高超的作战策略和无穷的耐性而闻名,同时也是最后一个屈服于美国政府的民族。开发小组以此寓意软件高效、可靠,同时表达了大公司迟早会参与竞争并“教化”这块最早的开源网络之地的担心。另外,因为整个软件是在NCSA HTTPd基础上打了很多补丁程序,他们也戏称它是“A Patchy Web Server”,意为一个打了很多补丁的Web服务器软件。“A Patchy”与Apache谐音,故以Apache命名一语双关。

Apache HTTP Server发布后,由于其具有坚实的稳定性、异常丰富的功能和灵活的可扩展性,得到了极大的成功。1999年6月,为有效支持Apache HTTP Server以及相关软件的发展,Apache开发小组成员们成立了一个非盈利性的Apache软件基金会(Apache Software Foundation)。大家对Apache这个名字的熟悉大概也是因为这个基金会,它支持开发了诸多享誉全球的开源软件,这些软件的名字前都会加上Apache,其中就包括Apache Tomcat。

Tomcat的这个单词的意思是“公猫”,因为它的开发者姆斯·邓肯·戴维森希望用一种能够自己照顾自己的动物代表这个软件,于是命名为tomcat,它的Logo兼吉祥物也被设计成了一只公猫形象。Tomcat是1999年Apache 软件基金会与Sun等其他公司一起合作的Jakarta(雅加达)项目中的一个子项目,作为服务器的容器支持基于Java语言编写的程序在服务器上运行,这样的程序被称为Servlet,因为它是运行在“Server”上的“Applet”。理论上讲这样一个容器并不是一个完整的服务器软件,因为它只能运行Java程序而不能生成HTML页面数据,也不能处理并发事务。但它集成了HTTP服务器程序,也就可以单独作为一个服务器软件来部署以处理HTTP请求,但tomcat核心技术并不在于此,所以除了用于开发过程中的调试以及那些对速度和事务处理只有很小要求的用户,很少会将Tomcat单独作为Web服务器。通常开发者会让tomcat与其他对Web服务器一起协同工作,比如Apache HTTP Server。Apache HTTP Server负责接受所有来自客户端的HTTP请求,然后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完成处理后,将响应传回给Apache,最后Apache将响应返回给客户端。于是在tomcat中运行Java程序也就是Servlet的那个模块因为体现了tomcat最核心特点而引起了大家的重视,而这个模块的名字叫做Catalina。

Catalina是美国西海岸靠近洛杉矶22英里的一个小岛,因为其风景秀丽而著名。Servlet运行模块的最早开发者Craig McClanahan因为喜欢Catalina岛故以Catalina命名他所开这个模块,尽管他从来也没有去过那里。另外在开发的早期阶段,Tomcat是被搭建在一个叫Avalon的服务器框架上,而Avalon则是Catalina岛上的一个小镇的名字,于是想一个与小镇名字相关联的单词也是自然而然。还有一个原因来自于Craig McClanahan养的猫,他养的猫在他写程序的时候喜欢在电脑周围闲逛。但这与Catalina有什么关系呢?我想可能是Catalina岛是个悠闲散步的好地方,猫的闲逛让Craig McClanahan想起了那里。

还找了一个有趣的问题:为什么Oracle中的用户名是'scott',密码是'tiger'?布鲁斯·斯科特(Bruce Scott)是甲骨文(当时的软件开发实验室)的第一批员工之一。SCOTT模式(EMP和DEPT表格)与密码TIGER是由他创建的,而TIGER是他的猫的名字。

感觉老外这些人起名好有创意,像这样的还有很多很多,例如Hadoop、Ubuntu、Debian、Android等等,大家感兴趣的可以搜索一下,作为茶余饭后的笑谈。

原文地址:https://www.cnblogs.com/Jingkunliu/p/14151056.html