Servlet
Servlet
概述
Servlet是Server Applet的简称,称为服务器端小程序或服务连接器,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
Servlet架构
Java Servlet是运行在Web服务器或应用服务器上的程序,作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。
使用Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet主要执行以下任务:
- 读取客户端(浏览器)发送的显式数据,包括网页上的HTML表单或自定义的HTTP客户端程序的表单。
- 读取客户端(浏览器)发送的隐式HTTP请求数据,包括Cookies,媒体类型和浏览器能理解的压缩格式等。
- 处理数据并生成结果、这个过程可能需要访问数据库、执行RMI等远程过程调用、调用Web服务或者直接计算得出对应的响应。
- 发送显式数据(文档)到客户端(浏览器),该文档的格式可以是多种多样的,包括文本文件(HMTL、XML或JSON文件)、二进制文件(GIF图像)、Excel等。
- 发送隐式HTTP响应到客户端(浏览器),包括告诉浏览器或其他客户端被返回的文档类型(例如HTML)、设置Cookies和缓存参数以及其他类似的任务。
Servlet生命周期
Servlet生命周期可被定义为从创建Servlet直到其销毁的整个过程。以下是Servlet遵循的过程:
- Servlet通过调用init方法进行初始化。
- Servlet通过service方法来处理客户端的请求。
- Servlet通过调用destroy方法终止。
- 最后,Servlet是由JVM的垃圾回收器进行垃圾回收的。
init方法
init方法被设计成只调用一次。它在第一次创建Servlet时被调用,在后续每次用户请求时不再调用。因此,它用于一次性初始化。
Servlet创建于用户第一次调用对应Servlet的URL时,但是也可以指定Servlet在服务器第一次启动时被调用。
用户调用一个Servlet就会创建一个Servlet实例,每一个用户请求都会产生一个新的线程,适当的时候交给doGet或doPost方法。init方法简单地创建或加载一些数据,这些数据将被用于Servlet的整个生命周期。
init方法定义如下:
1 |
|
Service方法
service方法是执行实际任务的主要方法。Servlet容器调用service方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。
每次服务器接收到一个Servlet请求时,服务器会产生一个新的线程并调用服务。service方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并在适当的时候调用doGet、doPost、doPut、doDelete等方法。
下面是该方法的特征:
1 |
|
service方法由容器调用,会在适当的时候调用doGet、doPost、doPut、doDelete等方法,所以不用对service方法做任何动作,只需要根据来自客户端的请求类型来重写doGet、doPost方法即可。
doGet()方法
当Servlet容器接收到GET请求时,会将请求由doGet方法处理。处理逻辑写在重写的doGet方法中。
1 |
|
doPost方法
当Servlet容器接收到POST请求时,会将请求由doPost方法处理。处理逻辑写在重写的doPost方法中。
1 |
|
destroy方法
当Servlet容器确定Servlet应该从服务器中移除时,将调用Servlet接口的destroy方法以允许Servlet释放它使用的任何资源和保存任何持久化的状态。例如,当想要借省内存资源或它被关闭时,容器可以执行destroy方法。
Servlet容器调用destroy方法之前,它必须让当前正在执行service方法的任何线程完成执行或超过服务器定义的事件限制。
一旦调用Servlet实例的destroy方法,容器就无法再路由其他请求到该Servlet实例。如果容器需要再次使用该Servlet,就必须用该Servlet类的一个新实例。在destroy方法完成后,Servlet容器必须释放Servlet实例以便垃圾回收。
1 |
|
使用场景
- doGet处理 HTTP GET 请求
- doPost处理 HTTP POST请求
- doPut处理 HTTP PUT 请求
- doDelete 处理 HTTP DELETE请求
- doHead处理 HTTP HEAD 请求
- doOptions处理 HTTP OPTIONS 请求
- doTrace 处理 HTTP TRACE 请求
Servlet容器
通俗点说,所谓容器,就是放东西的地方,Servlet容器自然就是方Servlet的地方。在Servlet开发中,我们需要按照Servlet的规范写代码,那么这样的代码就能在Servlet容器中运行。容器会按照规则加载类,并运行它。
Servlet容器的作用是负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。
常见的Servlet容器有 Tomcat、Jetty、Oracle Application Server、Oracle Weblogic、JBoss Application Server等。