02 - jsp的运行原理

jsp的运行原理

  • JSP的工作模式是请求/响应模式,客户端首先发出HTTP请求,JSP程序收到请求后进行处理并返回处理结果,在一个JSP文件第一次被请求时,JSP引擎(容器)把该JSP文件转换成为一个Servlet,而这个引擎本身也是一个Servlet. JSP的大概运行过程入下图示:
    jsp运行原理图

jsp运行过程

  1. 客户端发出请求,请求访问JSP文件.

  2. JSP容器现将JSP文件转换成一个Java文件,在转换过程中,如果发现JSP文件中存在任何语法错误,则中断转换过程, 并向服务器和客户端返回出错信息.

  3. 如果转换成功, 则JSP容器将生成的Java源文件编译成相应的字节码文件 *.class. 该class文件就是一个Servlet, Servlet容器回像处理其他的Servlet一样来处理它.

示例:
以Hello.jsp为例,当用户第一次访问Hello.jsp页面时,该页面会仙贝JSP容器转换为一个名称为 Hello_jsp.java 的源文件,然后将源文件便以为一个名称为Hello_jsp.class的字节码文件. 如果项目发布在Tomcat的webapps目录中 , 源文件和 .class文件可以在 "Tomcat安装目录/work/Catalina/localhost/项目名/org/apache/jsp " 中找到
在这里插入图片描述

上图中地址栏多出了org\apache\jsp , 这是由于JSP文件转换成类文件时会带有包名, 该报名为 org.apache.jsp . 从图中还可以看出 , 被转成的 .java文件和.class文件 (规则就是 把 “.” 变成"_" ,然后jsp接上去也作为文件名, 然后加上相应的后缀)

转换后的 .java文件
在这里插入图片描述

可以看到上图中 转换后的.java文件并没有实现Servlete接口, 但继承了 org.apache.jspper.runtime.HttpJspBase类. 在Tomcat源文件查看HttpJspBase 类的源代码 , 如下图:
在这里插入图片描述

从HttpJspBase源代码中可以看出, HttpJspBase类是HttpServlet的一个子类, 所以可以得出: jsp文件转换后的 java类 本质就是一个Servlet. 即jsp就是Servlet.

猜你喜欢

转载自blog.csdn.net/fanbaodan/article/details/84928210