最近在学习Java Web,发现Java Web的概念不少,并且各个概念之间的关系也挺复杂,本篇博客把这些关系总结于此,主要参考的博客附在文章末尾。html
服务器,硬件角度上说就是一台高性能的计算机。咱们一般指的服务器其实应该是装有可以处理具体请求事务的服务器软件的计算机。好比最多见的www服务器、mail服务器、计费服务器、ftp服务器等等。不少时候人们常把诸如Tomcat、IIS、Weblogic 也称之为web服务器,其实这些只是用于开发、集成、部署和管理Web应用、网络应用和数据库应用的应用服务器软件。咱们把遵照J2EE规范中的WEBAPPLICATION标准的WEB服务器就叫作J2EE中的WEB容器。java
全部的程序运行都须要有一个必要的运行环境。这个环境能够是软件,也能够是硬件,或者是软件和硬件的结合。好比说Windows操做系统须要运行在硬件基础上;Office软件须要运行在操做系统上。程序与运行环境之间会有必定的数据交换,好比操做系统会将运行指令传递给硬件,硬件也会将指令运行结果传递给操做系统。程序员
Java Web程序也须要一个运行环境才可以执行。这种运行Java Web程序的环境被称为Web容器,Java Web程序与Web容器之间存在数据交互。目前主要存在两种类型的Java Web容器:一种是独立的Java Web容器,在这种容器里面只能运行Web程序,这种容器通常也叫作Web服务器,如Tomcat等;另外一种是与其余Java EE容器混合在一块儿的Web容器,Web容器负责运行Web程序,其余容器负责运行EJB等程序,如WebLogic等。web
当用户经过浏览器等Web客户端软件向服务器发出一个请求以后,首先接收到这个请求的是Web容器,Web容器会将请求信息封装到一个HttpServletRequest类型的Java对象中,并将对象传递给Java Web程序。对于每一个请求,Web容器还会建立一个HttpServletResponse类型对象,该对象的做用是用来保存须要返回到浏览器等客户端的内容。数据库
Java Web程序能够从HttpServletRequest提取用户发出的请求信息,进行适当的处理以后,将处理结果放置到HttpServletResponse中,然或由Web容器解析HttpServletResponse对象内容,并将解析结果以浏览器可以识别的HTML等格式返回给浏览器等客户端。在这个过程当中,HttpServletRequest和HttpServletResponse就如同两条渡船,负责在Web容器和Java Web程序之间传递信息。须要注意的是,这两个对象仅存在于Web容器和Java Web程序当中,与浏览器没有关系。下图是这个过程的示意图:
设计模式
Web组件(Web Component)是构成Web应用、可以对来自浏览器等客户端请求作出回应的基本单元。在Java Web应用中,所提供的Web组件有Servlet、JavaServer Pages(JSP)、JavaServer Faces(JSF)等。另外还可使用其余类型Web应用一样使用的内容,好比HTML文件、静态图片等。事实上Java Web只提供了一种Web组件——Servlet,而JSP、JSF等都是基于Servlet的衍生技术。Servlet实质就是一个有特殊继承关系要求的Java类,理解Servlet就基本上彻底理解Java Web技术了。浏览器
Web应用能够认为是Web程序的另外一个名称。定义就是运行在Web容器当中的,可以完成完整功能的应用程序。Java Web应用由一系列编译以后的Java类、静态图片、静态HTML文件、配置文件等构成。经过Java Web应用能够就收用户的输入和请求,并对请求信息进行加工处理、访问数据库、对用户的请求给出回应。tomcat
开发Java Web应用程序处理须要遵照Web应用的一些特殊规范要求之外,与开发其余类型的应用程序并无本质区别。目前Web应用主要有两种类型:一种是以展现为目的的Web应用,这种应用会以HTML等标记文本或者浏览器所能识别的媒体格式最为请求返回内容,用户能够经过浏览器等客户端操做这类应用。另外一类是以服务为目的的Web应用,这类应用不提供图形操做界面,只提供方法调用结构,好比Web服务,该类应用通常只能被其余应用程序调用和访问。服务器
在Java EE技术体系中,除了Java Web之外,还包括EJB等其余技术。每一个技术体系会运行在各自的容器当中,不一样的部分组合在一块儿构成完整的Java EE应用,每一个部分根据本身的特色被称为Java Web模块或者EJB模块。之因此把他们称为模块,是由于但愿Java EE应用不一样部分能像积木同样组合出更大、更复杂的应用出来,而且每一个部分保证其独立性。不一样的模块都有本身特定的目录结构要求。Java Web模块的目录结构要求以下。网络
对于Java Web模块目录中WEB-INF、web.xml、classes、tags、lib这些内容之外,用户能够根据本身的须要在Web应用文档根目录下建立其余目录,好比能够为图片、不一样用途的HTML或者JSP单首创建目录;还能够为不用的Java类在classes下建立包目录。若是在你的Web应用中没有使用到Servlet、过滤器、监听器等Java Web组件,能够没有web.xml文件;若是没有使用到标签,则能够没有tags目录。
Web模块的发布工做,能够直接以目录的形式发布,也能够打包成jar格式文件进行发布。由于用途和内容的特殊性,打包文件的扩展名会采用.war而不是.jar。另外若是不是发布到独立的Web服务器上,而是发布到与其余Java EE一块儿使用的企业应用服务器上,还须要编写一个与企业应用服务器相关的配置文件,这个文件对于不一样的企业应用服务器也不一样,好比发布到glassfish服务器上,须要编写的文件时sun-web.xml。
尽管JSP在本质上就是Servlet,JSP编译后就是一个“类servlet”,可是二者的建立方式不同。
总之,JSP是Servlet的一种简化,使用JSP只须要完成程序员须要输出到客户端的内容,至于JSP中的Java脚本若是镶嵌到一个类中,由JSP容器完成,而Servlet则是个完整的java类,这个类的service方法用于生成对客户端的响应。
Servlet(小服务程序)是一个与协议无关的、跨平台的Web组件,它基于Java技术开发,由Servlet容器所管理。Servlet运行在服务器端,能够动态地扩展服务器的功能,并采用“请求一响应”模式提供Web服务。 Servlet的主要功能是交互式地浏览和修改数据,生成动态Web内容。
当初在Apache开发时还未出现Servlet的概念,因此Apache不能内置支持Servlet。实
际上,除了Apache,其余许多Web服务器软件都不能直接支持Servlet。为了支持Servlet,
一般要单独开发程序,这种程序通常称为Web容器,它在Servlet的生命周期内包容和管理Servlet,是一个实时运行的外壳程序。运行时由Web服务器软件处理通常请求,并把Servlet调用传递给容器来处理。Tomcat就是知足这种须要的JSP/Servlet引擎,是Sun公司的JSP/Servlet的官方实现。Tomcat服务器接收客户端请求并做出响应的完整过程下图所示。
Tomcat是提供一个支持Servlet和JSP运行的容器。Servlet和JSP能根据实时须要,产生动态网页内容。而对于Web服务器来讲,Apache仅仅支持静态网页,对于支持动态网页就会显得无能为力; Tomcat则既能为动态网页服务,同时也能为静态网页提供支持。尽管它没有一般的Web服务器快、功能也不如Web服务器丰富,可是Tomcat逐渐为支持静态内容不断扩充。大多数的Web服务器都是用底层语言编写如C,利用了相应平台的特征,所以用纯Java编写的Tomcat执行速度不可能与它们相提并论。
通常来讲,大的站点都是将Tomcat与Apache的结合,Apache负责接受全部来自客户端的HTTP请求,而后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完成处理后,将响应传回给Apache,最后Apache将响应返回给客户端。