web服务器,严格意义上讲就是实现http协议的最基本功能,能监听指定服务器端口,并接受请求发出响应的服务系统。例如apache、nginx等都是此类。不过现实中很多web服务器出于种种考虑回内置针对特定语言或架构的处理体系,例如iis内置了asp.net的处理架构,apache也可以通过扩展提供php、rails等处理架构(这些特别内置的模块,你也可以简单理解为web容器了)。如果web服务器自己不处理特别请求,那么可以通过cgi等方式转发给后端处理,例如apache、nginx都可以通过fastcgi将请求转发给后端端口,例如php-fpm服务,或python的什么服务等等。
其实在java之前一直不太有web容器这种说法,到目前似乎也只有java是这么提的。这主要是因为整个java的web开发是基于javaEE的servlet技术体系,该体系规范规定了web请求的整个生命周期的方方面面。但是规范只是规定了实现的标准,或者说是接口(interface),具体实现都是各厂商自己搞定,所以这就出现了各种不同的web容器,例如tomcat、jetty、jboss等等。
又说回来,这些容器为了方便开发者,大多都提供了web服务器的功能,不过和专业的web服务器相比总有些缺失不足,所以一般只用来做开发用,生产环境主要还是作为后端服务。