您的位置:首页 > Web前端 > JavaScript

【Head First Servlets and JSP】笔记3:Servlet的生命周期

2017-05-14 11:28 771 查看
1、servlet的存在就是要为客户服务。servlet的任务就是得到一个用户的请求,再发回一些响应。

请求可能很复杂,也可能很简单,例如,“为我的购物车结账”,这个请求携带了一些重要的数据,你必须知道如何获取这些数据;相应的,响应也可能需要携带一些东西,你必须知道怎样把这些附加信息写入响应。

servlet既可以直接输出响应给Web容器,也可以转发请求给JSP

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

用户点击一个URL,这个URL指向一个servlet

容器“看出”URL指向一个servlet,于是创建两个对象:HttpServletRequestHttpServletResponse

容器为对应的servlet创建线程,并将两个对象传入service(HttpServletRequest req, HttpServletResponse resp)

service方法根据客户发过来的HTTP方法(GET、POST等)调用servlet的对应方法(doGet(HttpServletRequest req, HttpServletResponse resp)doPost(HttpServletRequest req, HttpServletResponse resp)等)

servlet通过响应对象将响应写给客户,容器传回响应给客户。

service()线程结束,保留或是清理响应的对象,客户得到响应。

3、mark 一下tomcat的官方文档 Servlet API Documentation 以及head first系列 Head First (book series)

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类不会有多个实例![b]servlet类不会有多个实例![/b]





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

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



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

9、ServletConfig和ServletContext。每一个servlet都有一个ServletConfig对象,用处就是字面上的意思;每个Web应用都有个ServletContext(应该叫做AppContext),相当于应用中的一个公告栏。

10、最后,servlet的真正任务是处理请求,这才是servlet存在的意义,请求和响应是其中的关键。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: