理解JSP底层的关键在于理解JSP所遵循的生命周期。
JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件翻译成servlet。
JSP的生命周期主要包括:编译、初始化、执行和清理,请看下图:
当浏览器请求JSP页面时,JSP引擎首先会检查是否需要编译该文件。如果该文件没有被编译过,或者上次编译后被更改过,则重新编译。
编译的过程主要包括:
当容器载入JSP文件后,首先会调用 jspInit() 方法进行初始化工作。
如果你希望执行特殊的初始化任务,覆盖 jspInit() 方法就可以,像下面这样:
一般来讲JSP只进行一次初始化,servlet也是如此。你可以在 jspInit() 方法中做一些铺垫性的工作,例如打开数据库、打开文件或创建查询表。
这是最重要的一个阶段,JSP从这里开始处理用户请求,直到被销毁。
当JSP页面初始化完成后,容器会调用 _jspService() 方法。_jspService() 方法需要一个 HttpServletRequest 对象和一个 HttpServletResponse 对象作为它的参数,像下面这样:
每次请求,_jspService() 方法都会被调用一次并生成响应的内容(HTML代码)。
JSP的销毁阶段描述了当一个JSP页面从容器中被移除时所发生的一切。
JSP销毁阶段会调用 jspDestroy() 方法,等价于 Servlet 中的 destroy() 方法。
如果你希望在最后执行特殊的清理工作,如关闭数据库连接、关闭打开的文件等,覆盖 jspDestroy() 方法即可,像下面这样: