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、JSPdoGet()方法
当一个客户通过 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