(转载)jsp的内部方法jspInit(),_jspService(),jspDestroy()
jspInit(){}:jsp Page被初始化的时候调用该方法,并且该方法仅在初始化时执行一次,所以可以在这里进行一些初始化的参数配置等一次性工作,由作者创建
jspDestroy(){}:jsp Page由于某种原因被关闭的时候调用该方法,由作者创建
jspService(){}:由jsp容器自动创建的处理jsp Page的方法,由jsp容器创建,不能由作者定义。
当jsp文件第一次被处理时,他会被转化成一个servlet。jsp引擎首先把jsp文件转化成一个java源文件,如果在转化过程中发生错误的话,会立刻中止,同时向服务器端和客户端发送错误信息报告;如果转化成功了,就会产生一个class类。然后再创建一个 Servlet对象,首先执行jspInit()方法进行初始化操作,由于整个执行过程jspInit()方法只执行一次,所以可以在这个方法中进行一些必要的操作比如连接数据库,初始化部分参数等等,接着执行_jspService()方法,对客户端的请求进行处理,对每一个请求会创建一个线程,如果同时有多个请求需要处理的话就会创建多个线程,由于servlet长期贮存与内存中,所以执行速度快,但是由于初始化需要编译,所以第一次执行还是比较慢的,如果由于某种原因导致jsp网页关闭或者销毁的话会执行jspDestroy()方法。
jspInit()和jspDestroy()必须写在<%! %>里,注意这里有 ! 符号。
<%!
public void jspInit(){
super.jspInit();
System.out.println("jsp 初始化了");
}
%>
注意以上这种写法,如果eclipse工具中,Validation配置中,JSP Syntax Validator 项 build 时执行的选项被勾选,则在 build 时验证JSP语法会报错,提示super.jspInit()没有这个方法。因为JSP页面继承自HttpServlet类,而HttpServlet中确实没有jspInit()方法,jspInit()方法存在于接口JspPage中。工具认为这样是错误的,而super.jspInit()这样的写法在实际运行环境中是不会出错的。在build时验证JSP语法还存在另一个问题,如果一个jsp文件include了另一个jsp页面,被include的jsp页面中直接使用主jsp页面中的局部变量时,会提示局部变量未定义,而这在运行时是可以的。同时为了减少 build 的时间,一般 build 时的验证都可设为关闭。
最新文章
- 一步步开发自己的博客 .NET版(9、从model first替换成code first 问题记录)
- jQuery页面加载初始化的3种方法
- WCF部署于IIS使用的几个问题总结
- VS2016 发布项目提示 CS0006 C# Metadata file &#39;xxxxxxx.dll&#39; could not be found
- java 类之间的关系
- leetcode - 位运算题目汇总(下)
- 让div中的table居中
- golang type 和断言 interface{}转换
- Python列表操作——模拟实现栈和队列
- Spark Standalone模式伪分布式环境搭建
- java无符号移位(>;>;>;)和有符号移位(>;>;)
- CSS权威指南学习笔记系列(1)CSS和文档
- Openjudge-NOI题库-和数
- jmeter 单接口测试方案(接口无业务关联)
- jquery快速入门(二)
- 【BZOJ5315】[JSOI2018]防御网络(动态规划,仙人掌)
- request 请求头的处理
- 2017-2018-2 《网络对抗技术》 20155310 第二周 Exp1 PC平台逆向破解(5)M
- CSS3 Selectors All In One
- eclipse中的.project 和 .classpath文件的具体作用(综合):