Servlet概述
Servlet
Java Servlet,用Java编写的服务器端程序
其主要功能在于交互式地浏览和修改数据,生成动态Web内容
狭义的Servlet指Java语言实现的一个接口
广义的Servlet指任何实现了Servlet接口的类
Setvlet运行于支持Java的应用服务器中,原理上说,Servlet可以响应任何类型的请求,主要用于扩展基于HTTP协议的Web服务器
由来
Servlet是在服务器上运行的小程序
通常,服务器采用CGI应用程序完成一些根据用户输入访问数据库的程序。在通信量大的服务器上,Servlet执行速度更快,各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,使得服务器端处理请求的系统开销明显降低
- 实现过程
Servlet主要功能在于交互式地浏览和修改数据,生成动态Web内容
- 客户端发送请求至服务器
- 服务器将请求信息发送至Servlet
- Servlet生成响应内容并将其传给服务器
- 服务器将响应返回给客户端
生命周期
- 客户端请求该Servlet
- 加载Servlet类到内存
- 实例化并调用init()方法初始化Servlet
- 调用
Servlet
的service
方法(根据请求方法不同,调用doGet()、doPost()、doHead()、doPut()、doTrace()、doDelete()、doOptions()) - destroy()
- 客户端发送请求至服务器
- 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
- 服务器将响应返回客户端
编程接口
HTTPServlet
使用一个HTML表单来发送和接收数据
扩展HttpServlet
类来创建HTTPServlet类,该类是用专门的方法来处理HTML表单的GenericServlet
的一个子类
HttpServlet
类包含init(), destroy(), service()等方法,init()和destroy()方法继承而来
- init()方法
在Servlet生命周期中,仅执行一次init()方法,在服务器装入Servlet时执行。也可以配置服务器,在启动或者客户端首次访问Servlet时装入
缺省的init()方法设置了Servlet的初始化参数,并用ServletConfig对象参数来启动配置,所有覆盖init()方法的Servlet应调用super.init()确保仍然执行这些任务
-
service()方法
Servlet核心,缺省的服务功能是调用与HTTP请求的方法相应的do功能
Servlet响应可以是:
一个输出流,浏览器根据内容进行解释
一个HTTP错误响应,重定向到另一个URL、servlet、JSP -
doGet()方法
当一个客户通过 HTML 表单发出一个 HTTP GET 请求或直接请求一个 URL 时,doGet() 方法被调用。与 GET 请求相关的参数添加到 URL 的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用 doGet() 方法 -
doPost()方法
当一个客户通过 HTML 表单发出一个 HTTP POST 请求时,doPost() 方法被调用。与 POST 请求相关的参数作为一个单独的 HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用 doPost() 方法 -
destroy()方法
destroy() 方法仅执行一次,即在服务器停止且卸装 Servlet 时执行该方法。典型的,将 Servlet 作为服务器进程的一部分来关闭。缺省的 destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。
当服务器卸装 Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个 Servlet 在运行 service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成 -
getServletConfig()方法
getServletConfig() 方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext。ServletContext 接口提供有关 servlet 的环境信息 -
getServletInfo()方法
getServletInfo() 方法是一个可选的方法,它提供有关 servlet 的信息,如作者、版本、版权
当服务器调用 sevlet 的 service()、doGet() 和 doPost() 这三个方法时,均需要 “请求”和“响应”对象作为参数。“请求”对象提供有关请求的信息,而“响应”对象提供了一个将响应信息返回给浏览器的一个通信途径
javax.servlet 软件包中的相关类为 ServletResponse 和 ServletRequest,而 javax.servlet.http 软件包中的相关类为 HttpServletRequest 和 HttpServletResponse。Servlet 通过这些对象与服务器通信并最终与客户端通信。Servlet 能通过调用"请求"对象的方法获知客户端环境,服务器环境的信息和所有由客户机提供的信息。Servlet 可以调用“响应”对象的方法发送响应,该响应是准备发回客户端的
参考文献:
- 百科servlet