首页 > 代码库 > 【Head First Servlets and JSP】笔记3

【Head First Servlets and JSP】笔记3

1、servlet的存在就是要为客户服务。servlet的任务就是得到一个用户的请求,再发回一些响应。

  • 请求可能很复杂,也可能很简单,例如,“为我的购物车结账”,这个请求携带了一些重要的数据,你必须知道如何获取这些数据;相应的,响应也可能需要携带一些东西,你必须知道怎样把这些附加信息写入响应。
  • servlet既可以直接输出响应给Web容器,也可以转发请求给JSP

 

2、Web容器(例如Tomcat)全盘控制着servlet的一生。

  1. 用户点击一个URL,这个URL指向一个servlet
  2. 容器“看出”URL指向一个servlet,于是创建两个对象:HttpServletRequestHttpServletResponse
  3. 容器为对应的servlet创建线程,并将两个对象传入service(HttpServletRequest req, HttpServletResponse resp)
  4. service方法根据客户发过来的HTTP方法(GET、POST等)调用servlet的对应方法(doGet(HttpServletRequest req, HttpServletResponse resp)doPost(HttpServletRequest req, HttpServletResponse resp)等)
  5. servlet通过响应对象将响应写给客户,容器传回响应给客户。
  6. service()线程结束,保留或是清理响应的对象,客户得到响应。

 

3、mark 一下tomcat的官方文档 Servlet API Documentation 

 

4、HttpServlet的继承树、接口

  • java.lang.Object 

    技术分享javax.servlet.GenericServlet

      技术分享javax.servlet.http.HttpServlet

        技术分享MyServlet    

  • All Implemented Interfaces:java.io.Serializable, Servlet, ServletConfig

Servlet接口:包括三个生命周期方法

GenericServlet:抽象类,包括大部分基本servlet行为,基本不扩展这个类

HttpServlet:强调servlet的HTTP特性

MyServlet:覆盖所需的HTTP方法,例如doPost等

 

5、每个请求都在一个单独的线程运行(不是进程),servlet类不会有多个实例!servlet类不会有多个实例!

技术分享

 

技术分享

 

6、servlet类的加载和实例化到底是什么时候开始的?基本上是在容器启动时,有例外,但是一定是在第一个客户请求提供服务之前。

 

7、在init()之前,还只是个普通的对象,当且仅当一个对象具备“servlet特性”的时候,才能被称作servlet

技术分享

 

8、在构造函数和init()之间,servlet处于一种 介于生与死之间的状态 Schrödinger‘s cat - Wikipedia

【Head First Servlets and JSP】笔记3