上回小傅老师给大家讲述Servlet的工作原理,不知同学们没有结合案例进一步思考和操作。
我们知道要让一类运行起来一定要手工创建其实例,一段时间内没有对其使用,JVM会将其当内存垃圾回收以释放空间。Servlet的实例不需要程序员手功创建,是由容器负责创建与回收。
创建
第一次请求Servlet时,容器会加载Servlet类并生成一个实例,紧接着对其初始化。HttpServlet中提供了一个init()方法供我们重写,在此方法中可取得Servlet的配置参数或者申请外部的资源。第二次请求Servlet时,容器不会再生成新实例,继续使用以生成的实例。
Servlet在其生命周期内有且只有一个实例,这样做的优式可以大幅减小服务器侧的内存开销,快速向客户端做出响应,以达到良好的客户体验。
初始化
HttpServlet抽象类提供了二个init()方法,一个带ServletConfig的参数另一个不带参数。带参数的方法是供容器内部调用,如要重写我们要使用不带参数的init()。可通过xml或注解的方式给Servlet配置初始化参数,也可设定一些描述性的信息。
以下代码展示参数的设定与取得
执行
初始化完成后,容器调用service()方法,根据请求的类型转发到相应的doXXX()方法。Service()是较底层的执行方法,一般不要重写。doXXX()方法中的XXX是具体的请求类型,常用的有get,post。
销毁
容器停止服务器时,会把所有的servlet实例销毁。在销毁前容器调用servlet的destory()方法,将之前申请的外部资源或新开的线程等都释放。
小结
Servlet在第一次请求到来时由容器创建并调用init()对其初始化,在其生命周期内有且只有一个实例。请求经service()方法分发到最终的doXXX()方法中得到处理,容器停止服务器时主动调用destroy()方法释放相关的资源。
“生命周期“知识点小傅老师讲解完了,还没有实际操作的同学快动手应用一下吧。