Servlet学习之(一)Servlet是什么
一、Servlet是什么
Servlet是一个类,是一个用Java语言编写的、实现Servlet接口的类,一个与访问协议和平台无关的,运行在Servlet容器中的Java程序。
Servlet没有main方法,不能独立运行;它只有实例化、初始化、运行、销毁方法,被编译成与平台无关的字节码文件后,需要加载到Servlet容器中才能执行,并且由Servlet容器管理Servlet的整个生命周期,所以,也常常称Servlet是Servlet容器上运行的服务器小程序。
Servlet推出初期,主要是作为支持HTTP协议的WEB服务器上的一种动态网页技术;随着Servlet技术的不断发展,Servlet可以作为支持任何协议的、实现Java API的服务器上的服务程序。
Servlet运行在服务器上,它可以接受来自客户端的请求,并将处理结果返回给客户端,于是,在许多应用中,Servlet主要用于实现动态网页,亦或作为前端页面与后台数据库或者后台服务器程序之间的中间件。
二、Servlet容器
Servlet容器作为支撑Servlet运行的平台,是一个非常重要的部件。也可以把Servlet容器看成是一个装载着许多Servlet对象的容器,Servlet容器负责管理这些Servlet对象。
Servlet容器运行在JVM(Java虚拟机)之上,管理Servlet的实例化、初始化、实例对象的运行和销毁,并提供最基础的运行支撑,例如:Servlet容器负责接收请求、转发请求、发送响应、管理会话状态、实现数据共享等等。
Servlet容器至少支持通过HTTP协议访问Servlet,也可以支持其他协议,例如:HTTPS、FTP、POP、SMTP等。
Servlet与Servlet容器的关系如下图所示:
访问Servlet容器中Servlet的过程如下:
(1)客户发送访问请求至Servlet容器
(2)Servlet容器接收请求,解析,然后将请求发送给相应的Servlet处理
(3)Servlet执行,将处理结果返回给Servlet容器
(4)Servlet容器接收处理结果,将处理结果返回给客户
从以上访问Servlet的过程,可以看出,Servlet容器的作用如下:
(1)接收请求:当客户请求来到时,Servlet容器负责接收请求
(2)管理与调用Servlet:Servlet容器管理Servlet的加载、实例化、初始化、调用与垃圾回收,根据请求的Servlet地址,调用要访问的Servlet
(3)返回响应结果:将Servlet的执行结果返回给客户
Servlet运行在Servlet容器中,容器为Servlet提供运行时的平台支撑,于是,在Servlet中,只需要专注于业务逻辑功能实现,而无需考虑网络通讯、垃圾回收等功能,这些基本功能由Servlet容器提供。
Servlet容器主要提供了如下功能:
(1)基本通信支持:Servlet容器提供了与WEB服务器之间的通信方法,使Servlet可以与WEB服务器轻松对话,并借助WEB服务器与客户端浏览器之间的通信机制,使Servlet容器无需自己建立Socket服务、监听通信端口、创建数据流对象等;Servlet容器定义了与WEB服务器之间的通信协议,所以,在Servlet中,无需考虑WEB服务器(例如:Tomcat)和自己的功能代码之间的API接口,只需要考虑如何在Servlet中实现业务逻辑功能(例如:处理一个订单)。
(2)管理Servlet生命周期:Servlet容器管理着Servlet的整个生命周期,负责查找、加载、实例化、初始化、调用Servlet方法,以及销毁,有了Servlet容器,就不需要考虑Servlet资源的管理。
(3)支持多线程:Servlet容器会自动为它所接收的每一个客户请求创建一个新的Java线程,以处理该请求;对于每一个客户请求,Servlet服务方法执行结束,则Servlet容器就会结束立即这个线程。
(4)声明方式实现安全:按照Servlet容器要求,使用web.xml部署描述文件或注解来配置和修改安全性,而不必将其硬编码写到Servlet类代码中。
(5)支持JSP动态页面:Servlet容器负责将JSP页面翻译成Java Servlet代码,按Servlet来管理JSP页面的运行。
根据Servlet应用模式,Servlet最常用的模式是通过Servlet容器运行在WEB服务器中,以执行请求和响应,请求与响应的典型范例是用动态网页技术实现动态网页,或者作为前端页面与后台数据库/后台服务器程序之间的中间件,于是,Servlet容器需要与WEB服务器或应用服务器结合,才能为WEB应用程序的访问提供服务。
Servlet容器可以在WEB服务器内部实现,也可以作为WEB服务器的附加构件提供,还可以实现在有WEB使能的应用服务器上,为Servlet的访问提供运行支撑。
WEB服务器启动时,Servlet容器也会随之启动。
三、WEB服务器
WEB服务器也称WWW(WORLD WIDE WEB)服务器,是安装并运行着WEB服务器软件的计算机,主要用于提供网上信息访问服务。WEB服务器不仅能够存储信息,还能接收来自客户机WEB浏览器的资源请求,处理请求,并返回处理结果。
常见的WEB服务器软件有WebLogic、Tomcat、IIS等。
WEB服务器软件是指驻留在WEB服务器上的服务程序。当WEB浏览器(客户端)连接到WEB服务器并请求资源时,服务器将接收并处理请求,并将处理结果发送回浏览器,发送给浏览器的信息还有资源的大小、文件类型等,即:告诉客户端浏览器如何查看资源。
WEB服务器与客户端浏览器之间,通过HTTP(超文本传输协议)进行通信。
客户端WEB浏览器访问WEB服务器上资源的过程大致可以分为四个步骤:创建连接、客户端请求、服务器应答、关闭连接。
(1)创建连接:客户端WEB浏览器与WEB服务器之间通过Socket三次握手,建立TCP连接。
(2)客户端请求:WEB浏览器在TCP连接基础上,使用应用层HTTP协议向WEB服务器发送资源访问请求。
(3)服务器应答:WEB服务器接收到请求后,调用资源,实施任务处理,然后使用HTTP协议把任务处理的结果发送回WEB浏览器,WEB浏览器负责显示响应结果。
(4)关闭连接:当WEB服务器应答完成后,WEB服务器主动断开与WEB浏览器之间TCP连接。
Servlet常常也可以作为WEB服务器上的应用资源,提供客户端访问。
Servlet作为一种可驻留在WEB服务器上运行的Java服务器程序,下图说明了Servlet在WEB应用程序中的位置。
若WEB服务器要支持Servlet的运行,就需要与Servlet容器相结合,为客户端提供Servlet的访问服务。许多WEB服务器内含了Servlet容器,例如:Tomcat、Jetty、JBoss、WebLogic既是WEB服务器软件,也是Servlet容器,即:它们包含了Servlet容器。
四、Servlet容器与WEB服务器共同处理客户请求
当客户端通过WEB浏览器请求访问WEB服务器上的Servlet时,Servlet容器作为WEB服务器中的一个组件,需要与WEB服务器一起共同处理一个客户请求,处理过程如下:
(1)客户端WEB浏览器与WEB服务器之间通过Socket建立TCP连接,并使用HTTP协议向WEB服务器发送Servlet访问请求
(2)WEB服务器负责接收来自客户端浏览器的HTTP请求
(3)WEB服务器将接收到的请求,转发给Servlet容器
(4)如果客户端要访问的Servlet不在Servlet容器中,则检索Servlet,并加载到容器的地址空间中
(5)Servlet容器调用Servlet的构造器和初始化init()方法,创建Servlet实例,并进行初始化(实例化与初始化方法,仅在第一次加载Servlet时,调用一次,即:创建一个Servlet实例)
(6)Servlet容器调用Servlet的service()方法处理HTTP请求,并将处理结果返回给WEB服务器,同时,将Servlet实例暂时保留在Servlet容器的地址空间中,可以继续响应客户端的HTTP请求
(7)WEB服务器将Servlet的处理结果发送回客户端浏览器
(8)WEB服务器完成响应,主动断开与WEB浏览器之间TCP连接
五、使用Servlet的优点
1、运行效率高
Servlet在Servlet容器中是单进程运行的(即:单例模式),即使多次访问同一个Servlet,Servlet容器也只需在第一次访问时,加载一次Servlet实例到容器的地址空间中;对于以后的每次访问,Servlet容器会自动为它所接收的每个Servlet请求创建一个新线程处理请求,响应结束后,Servlet容器会立即结束线程。
只有在Servlet发生改变时,才会重新加载Servlet,而且加载一个修改后的Servlet无需重新启动服务器,以提高Servlet运行效率。
2、标准的API接口
SUN公司为Servlet的开发提供了一套标准的Servlet API,以保证Servlet开发的一致性,这一套标准API最大的优点是与网络协议无关,其次,可扩展性强,简单易用,可以通过继承机制,快速地增强功能。
在Servlet API中,没有