JSP的运行原理及执行过程
1、运行原理
当用户在浏览器地址栏上输入http://localhost:8080/dage/list_order.jsp,web服务器判断用户请求的资源是dage应用中的list_order.jsp页面,web服务器在dage应用中找到list_order.jsp,启动JSP翻译引擎,将list_order.jsp翻译成list_order_jsp.java文件,并且将list_order_jsp.java文件编译生成list_order_jsp.class字节码文件,将其存储在Tomcat服务器work目录中。list_order_jsp.class类继承了HttpJspBase,HttpJspBase继承了HttpServlet,所以JSP本质上就是Servlet,和Servlet完全相同。只有用户第一次访问这个JSP或者JSP页面被修改了,才会重新翻译。JSP有三个阶段:翻译(一次),编译(一次),运行(多次)。JSP更改,不需要重启服务器,也不需要重新部署项目。Jsp和Servlet本质上没有区别,但是JSP和Servlet它们的主要职责是有区别的:JSP主要是提取数据做页面展示,而Servlet主要完成业务逻辑处理以及资源跳转。Servlet是Controller(控制层),JSP是View(展示层)。(JSP和Servlet都是单实例多线程的环境下运行的,JSP和Servlet中出现的实例变量、静态变量都会存在线程安全问题。)
2、JSP执行过程
1)首先,客户端发出请求(request ),请求访问JSP网页
2)接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
3)然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行
4)最后把结果响应(response )给客户端
执行JSP网页文件时,需要经过两个时期:转译时期(TranslationTime)和请求时期(RequestTime)。
转译时期:JSP转译成Servlet类(.class文件)。
请求时期:Servlet类(.class文件)执行后,响应结果至客户端。
转译期间主要做了两件事情:
(1)将JSP网页转译为Servlet源代码(.java),此段称为转译时期(Translation time);
(2)将Servlet源代码(.java)编译成Servlet类(.class),此阶段称为编译时期(Compilation time)。