Fork me on GitHub

JackLin的博客

当前位置:首页 > 标签

SpringBoot 14 Spring 2 SpringMVC 3 MyBatis 2 Linux 4 阿里云 13 宝塔 1 Docker 3 ElasticSearch 2 Redis 4 Shiro 0 Dubbo 0 Swagger 0 Thymeleaf 6 数据库 11 MySQL 11 外键 2 Gradle 1 Test 0 Tomcat 1 JavaWeb 7 Ajax 1 注解 3 css 2 报错 3 多数据源 1 Java基础 1 源码 2 Servlet 1 JSP 1 环境搭建 8 RabbitMQ 1 七牛云 1 Edit.md 1 图像识别 4 英语 2 Zookeeper 1

JSP运行原理分析

  • 2020-04-24
  • 131
  • JavaWeb
JSP的全名是 Java Server Page,它可以在传统的的HTML文件中插入Java程序段。 正是由于这个特性,在早期的JavaWeb开发中,JSP几乎是神一样的存在。 今天我们就来分析一下JSP的运行原理,以及JSP到底是什么 ### JSP是什么 先抛出结论:JSP就是一个Servlet 需要解释这个的从JSP的工作原理开发分析 ### JSP工作原理 #### 将JSP翻译成java文件 当我们在IDE中创建一个JSP文件之后第一次被访问时,Web容器就会将我们写的JSP文件翻译成为一个 .java 文件以及对应的 .class 文件 如下图所示,我在 web 目录下面创建了一个 test.jsp 文件 ![](/upload/temp.png) 第一次访问之后,我们可以看到在 `C:\Users\用户名\.IntelliJIdea2019.3\system\tomcat\工程名称\work\Catalina\localhost\工程名册\org\apache\jsp` 里面,生成了下面 2 个文件: ![](/upload/2020-4-24 213417.png) 这 2 个文件就是翻译而成的java文件。 #### 翻译成的Java文件就是Servlet **要想找到这几个类,需要导入tomcat里面的jar包 ** 点进这个生成的Java文件里面,这里类开头是这样的 ![](/upload/_202004242212101SS.png) 再来看看 HttpJspBase,重要发现这个类就是继承了 HTTPServlet ![](/upload/2020-4-24 221830.png) **而我们生成的 java 类,继承了 HttpJspBase,所以说生成的 Java 类就是Servlet** #### 生成的Java类干了什么 在这个生成的 Java 类里面,主要干了2件事 - 将 jsp 页面的各种html标签通过流的方式输出 ![](/upload/_2020042422533353SS.png) - 定义了一些内置对象,这些对象我们就可以在jsp页面中使用 ![](/upload/2020-4-24 223535.png)