日期:2014-05-18  浏览次数:20665 次

J2EE学习从菜鸟变大鸟之七 Servlet

    Servlet现在自己的理解是一个控制器,简单的可以理解为不同的JSP页面由用户发送过来的请求可以由Servlet控制器来控制其向下调用的方向(结合三层好理解),但它比较特殊,因为它通常会从外界接收数据,然后对数据进行处理,完了之后会跳到JSP页面去。其实说白了揉碎了,它就是一段处理数据和逻辑的JAVA代码。



官方解释:

       Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

       Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。


Servlet和CGI

   

    在更深入的理解Servlet概念之前,先来看看CGI,有助于理解Servlet,CGI(Common Gateway Interface),通用网关接口。


    通用网关接口是一种根据请求信息动态产生回应内容的技术。通过CGI,Web服务器可以将根据不同的请求启动不同的外部程序,并将请求内容转发给该程序,在程序执行结束后,将执行结果作为回应返回给客户端。也就是说,对于每个请求,都要产生一个新的进程进行处理。因为每个进程都会占有很多服务器的资源和时间,这就导致服务器无法同时处理很多的并发请求。另外CGI程序都是与操作系统平台相关的,虽然在互联网爆发的初期,CGI为开发互联网应用做出了很大的贡献,但是随着技术的发展,开始逐渐衰落。


   后来随着Web应用复杂度的提升,并要求提供更高的并发处理能力,Servlet在Java平台上得到实现,现在提起Servlet,指的都是Java Servlet。JavaServlet要求必须运行在Web服务器当中,与Web服务器之间属于分工和互补关系。确切的说,在实际运行的时候JavaServlet与Web服务器会融为一体,如同一个程序一样运行在同一个Java虚拟机(JVM)当中。


    与CGI不同的是,Servlet对每个请求都是单独启动一个线程,而不是进程。这种处理方式大幅度地降低了系统里的进程数量,提高了系统的并发处理能力。另外因为JavaServlet是运行在虚拟机之上的,也就解决了跨平台问题。如果没有Servlet的出现,也就没有互联网的今天。



Servlet的执行过程?  




首先,客户端发送请求到服务器端;

其次,服务器端根据web.xml文件中的Servlet相关配置信息,将客户端请求转发到相应的Servlet;
之后,Servlet会根据request对象中封装的用户请求与数据库进行交互,返回数据之后,Servlet会将返回的数据封装到response对象中;
此时,控制权从Servlet重新回到服务器端,最后,服务器端将响应信息返回给客户端,并且跳转到相应的页面。