jsp 的本质 ,其实是一个 Servlet 程序。
首先我们去找到我们 Tomcat 的目录下的 work\Catalina\localhost 目录。当我们发布 day09 工程。并启动 Tomcat 服务器后。我们发现 在 work\Catalina\localhost 目录下多出来一个 day09 目录。
一开始 day09 目录还是空目录。
然后,我们在浏览器输入一个 jsp 文件的访问路径访问。 比如 http://127.0.0.1:8080/day09/index.jsp 访问 index.jsp 文件
day09 目录马上会生成 org\apache\jsp 目录。 并且在会中有两个文件。
index_jsp.class 文件很明显是 index_jsp.java 源文件编译后的字节码文件。 那么 index_jsp.java 是个什么内容呢? 生成的 java 文件名,是以原来的文件名加上_jsp 得到。 xxxx_jsp.java 文件的名字 我们打开 index_jsp.java 文件查看里面的内容: 发现,生成的类继承于 HttpJspBase 类。这是一个 jsp 文件生成 Servlet 程序要继承的基类!!!
于是,我们关联源代码。去查看一下 HttpJspBase 类的内容。从源码的类注释说明中,我们发现。HttpJspBase 这个 类就是所有 jsp 文件生成 Servlet 程序
需要去继承的基类。并且这个 HttpJspBase 类继承于 HttpServlet 类。所以 jsp 也是一个 Servlet 小程序。
我们分别在工程的 WebContent 目录下创建多个 jsp 文件。然后依次访问。它们都被翻译为.java 文件并编译成 为.class 字节码文件
我们打开 index_jsp.java 文件查看里面的内容不难发现。jsp 中的 html 页面内容都被翻译到 Servlet 中的 service方法中直接输出
小结: 从生成的文件我们不难发现一个规则。 a.jsp 翻译成 java 文件后的全名是 a_jsp.java 文件 b.jsp 翻译成 java 文件后的全名是 b_jsp.java 文件 那么 当我们访问 一个 xxx.jsp 文件后 翻译成 java 文件的全名是 xxx_jsp.java 文件 xxx_jsp.java 文件是一个 Servlet 程序。原来 jsp 中的 html 内容都被翻译到 Servlet 类的 service 方法中原样输出。