嘿嘿!我一直想知道 web 容器、web 服务器、servlet 容器、应用程序服务器、web 框架、web 平台等之间的区别是什么。这些术语一直让我感到困惑。在谷歌上搜索得到了一些答案,但有时,网上的信息很矛盾。
根据我的理解,应用服务器是一个复杂的东西,它包括一个网络服务器和更多的东西,比如业务逻辑支持,EJB。 Web 服务器只处理简单的 http。 Web 容器是一个 Web 服务器并提供 servlet/JSP 支持。我对吗?有人可以阐明这些技术吗?也许一些引用和比较将不胜感激。我知道可能已经问过类似的问题 - 但他们要么没有得到正确回答,要么有相互矛盾的答案,或者不比较上面提出的所有技术。提前致谢!
最佳答案
也许您只是在表达对科技行业缺乏通用术语的失望,但这是我的尝试:
web 容器 - 这可能与下面的应用程序服务器相同,但专门用于 web 应用程序。
网络服务器 - 即 Apache、IIS 等。通过网络提供内容。也可用于指代通过 Web 提供内容的硬件。即“我可以访问数据库,但 Web 服务器不会响应我的 ping”。
servlet 容器 - 即 Tomcat、Jetty、Weblogic 等。这是一个特定于 Java 的术语。它指的是实现 java servlet 规范的东西。
应用程序服务器 - 即 Weblogic、Websphere、Tomcat 等。在您部署应用程序的地方(java 领域的 war/ear 文件)。 Servlet 容器是一种应用程序服务器。应用程序服务器还可以做其他事情,比如处理消息传递。应用服务器充当您的应用与其周围环境之间的一层。
网络框架 - 一个框架/库,您可以使用它更轻松地编写网络应用程序。如果愿意,您可以编写裸 servlet,但像 struts/tapestry/wicket/etc 这样的框架可能会使它更容易。一些框架可能针对特定的应用服务器。
网络平台 - 我将其定义为应用服务器附带的一种网络框架 - 即一切都在一个盒子里。您还可以使用该术语来指代诸如内容管理系统之类的东西,这些系统可以让您构建网站 - 即 Drupal
关于java - 各种网络相关技术之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4600976/
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最