这里所讨论的Servlet,准确的说,应该是javax.servlet.http.HttpServlet,它是服务器收到请求之后调用的,专门用来响应HTTP请求,并且提供了响应请求的doGet()和doPost()方法. 它本质上来说就是一个java类,只不过它是运行在服务器上的java类.它具有独立于平台和协议的特性,可以生成动态的Web页面. 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
Java Servlet API 定义了一个servlet 和Java使能的服务器之间的一个标准接口,这使得Servlets具有跨服务器平台的特性。 Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给 Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客户机发出请求。
先上图:
i. 加载Servlet并实例化(new),同时初始化(init)
servlet第一次被请求加载时,服务器初始化这个servlet,即创建一个servlet对象,这对象调用init方法完成必要的初始化工作。
ii. 处理请求(service→doGet/doPost)
诞生的servlet对象再调用service方法响应客户的请求。根据请求,service会调用doGet()或doPost()进行处理.
iii. 退出服务(destroy)
当服务器关闭时,调用destroy方法,消灭servlet对象。
i. Servlet只实例化一次
ii. Init方法也只执行一次
iii. Servlet不是线程安全的
即init方法只被调用一次,即在servlet第一次被请求加载时调用该方法。当后续的客户请求servlet服务时,Web服务将启动一个新的线程,在该线程中,servlet调用service方法响应客户的请求,也就是说,每个客户的每次请求都导致service方法被调用执行。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机,下面对Servlet类与普通Java类进行了一个简单的对比:
新知识的学习我们总是想方设法与现有的旧知识进行类比,再高明一点的话可以直接用生活化的语言解释清楚。而我学习java不久,只能从现在的知识中寻找以前的影子,下面的这张图是近来学习Servlet时想到的将.NET与JAVA对比,不足之处还请大家不吝指教:
上图一对比就会发现它们虽然属于不同的平台,使用不同的语言,但本质就很相像了,。依样画葫芦,以后上手的话就可以快很多了。本篇博客只限于对servlet的浅显认知,下篇将使用一个小例子说明Servlet的基本原理,敬请期待~