01serlvet 概述

1. Servlet的功用
Servlet是运行在服务器端的java程序,它是一个中间层,负责连接来自web浏览器或其他http客户程序的请求和数据库或应用程序。
功能:
(1) 读取客户发送的显式数据:例如表单数据;
(2) 读取由浏览器发送的隐式请求数据,即后台的http信息,包括:cookie、浏览器所能识别的媒体类型和压缩模式等;
(3) 生成结果:例如访问数据库得出对应的响应;
(4) 向客户发送显式数据,即文档:文档可以用各种格式发送,包括文本(HTML、XML),二进制(GIF图)等;
(5) 发送隐式的HTTP响应数据:HTTP响应数据的发送过程涉及告知客户端返回文档的类型,设置cookie和缓存参数,以及其他类似任务。

2. Servlet的基本结构
Servlet一般扩展HttpServlet,并依据数据发送方式的不同,覆盖doGet或doPost方法。如果希望servlet对GET和POST请求采用同样的行动,只需要让doGet调用doPost,反之亦然。
doGet和doPost都接受两个参数:HttpServletRequest和HttpServletREsponse,前者可以得到所有的输入数据,通过后者可以指定输出,最重要的是通过后者可以得到PrintWriter(code: PrintWriter out = reaponse.getWriter() ),用它可以将文档内容发送给客户。

3. Servlet生命周期
首次创建servlet时,会调用init方法,因此,init是放置一次性设置的地方。在这之后,针对每个用户请求,都会创建一个线程,每个线程都会调用service方法,service方法依据接收到的HTTP请求的类型,调用doGet、doPost方法。最后,如果服务器决定卸载某个servlet,会首先调用servlet的destroy方法。
Init方法:只在servlet首次载入的时候,执行复杂的初始化任务,但不是每次请求都重复这些任务。Servlet一般在首次被调用时创建,但也可以指定在服务器启动后载入。
Destory方法:在服务器移除servlet实例之前,它会调用该方法,从而使servlet有机会关闭数据库连接、停止后台运行的线程、将cookie列表和点击计数写入到磁盘,并执行其他清理动作。要注意服务器有可能崩溃,不要把destroy机制作为向磁盘上保存状态的唯一机制,比如点击计数,应该主动、定期将数据写到磁盘上。

4. SingleThreadModel接口
通常情况下,系统只生成servlet的单一实例,所以,当多用户并发访问时,就有多个线程并发访问同一个servlet对象。因此,一定要注意共享数据的同步。
如果servlet继承HttpServlet的同时implements SingleThreadModel接口,那该servlet将串行响应客户端请求。
不推荐使用该方法来实现同步,应该使用同步块(synchronized)。

你可能感兴趣的:(数据结构,Web,应用服务器,浏览器,servlet)