JSP页面执行过程
JSP页面其实是一个Servlet。JSP 页面是在JSP容器中运行的。Servlet 容器一般也是JSP 容器。例如, Tomcat 就是一个Servlet/JSP 容器。
第一次请求一个JSP页面时,Servlet/JSP 容器要做两件事情:
1. 将JSP 页面转换成一个JSP页面实现类,这是一个实现javax.servlet.jsp.JspPage接口或其子接口javax.servlet.jsp.HttpjspPage 的Java类。JspPage是javax.servlet.Servlet的子接口,这样会使每个JSP 页面都成为一个Servlet. 所生成Servlet 的类名取决于Servlet/JSP 容器。这一点不必操心,因为不需要你直接处理。如果有转换错误,错误消息将会发送到客户端。
2. 如果转换成功, Servlet/JSP 容器将会编译Servlet 类。之后,容器加载和实例化Java字节码,并执行它通常对Servlet 所做的生命周期操作。
对于同一个JSP 页面的后续请求, Servlet/JSP 容器会查看这个JSP页面自从最后一次转换以来是否修改过。如果修改过,就会重新转换、重新编译,并执行。如果没有,则执行内存中已经存在的JSP Servlet 。这样,第一次调用JSP 页面的时间总是会比后续请求的更长,因为它需要转换和编译。为了解决这个问题,可以采取以下任意一种措施:
配置应用程序,以便在应用程序启动之时,调用所有的JSP 页面(实际上是指转换和编译) , 而不是在初始请求时才调用。
预先编译JSP页面,并将它们以Servlet 的方式进行部署。
Servlet与JSP生命周期对比
Servlet的生命周期:
1)构造方法(第1次访问)
2)init方法(第1次访问)
3)service方法
4)destroy方法
Jsp的生命周期
1)翻译: jsp->java文件
2)编译: java文件->class文件(servlet程序)
3)构造方法(第1次访问)
4)init方法(第1次访问):_jspInit()
5)service方法:_jspService()
6)destroy方法:_jspDestroy()
Jsp的最佳实践
Servlet技术: 开发动态资源。是一个java类,最擅长写java代码
jsp技术: 开发动态资源。(通过java代码)最擅长输出html代码。
各取所长:
在web项目中涉及到逻辑:
1)接收参数 servlet做
2)处理业务逻辑,返回结果 servlet做
3)显示数据到浏览器 jsp做
4)跳转到其他页面 servlet做
servlet+jsp模式
servlet:
1)接收参数
2)处理业务逻辑
3)把结果保存到域对象中
4)跳转到jsp页面
Jsp:
1)从域对象取出数据
2)把数据显示到浏览器
servlet的数据 jsp页面
List<Contact> 使用域对象 共享数据