JSP是什么?
- JavaServer Pages
- 基于java语言实现的服务器端页面
- JSP是JavaEE规范之一
JSP文件通常存放在什么位置?
- JSP可以放到WEB-INF目录外
- 在实际开发中,有很多项目是将JSP放到WEB-INF目录中,保护JSP
- WEB-INF目录中数据相对安全
JSP文件后缀是什么?
- 默认是.jsp
- 但是jsp文件的后缀也可以修改的,通过修改CATALNA_HOME/conf/web.xml文件
JS和JSP区别?
- JS:JavaScript,运行在浏览器中,和服务器没有关系,和java也没有关系
- JSP:JavaServer Pages,运行在服务器中,JSP底层就是java程序,运行在JVM中
JSP执行原理
- 浏览器中访问路径虽然是以.jsp结尾,访问某个jsp文件,其实底层执行的是jsp对应的java程序
- Tomcat服务器负责将.jsp文件翻译生成.java源文件,并且将源文件编译生成.class字节码文件
- 访问jsp,其实底层还是执行了.class文件中的程序
- Tomcat服务器内置了一个jsp翻译引擎,专门负责翻译jsp文件,翻译java文件
- index.jsp会被翻译生成index_jsp.java,编译生成index_jsp.class
- index_jsp这个类继承了HttpJspBase,而HttpJspBase继承了HttpServlet
- jsp就是Servlet,只不过是职责不同,JSP的强项做页面展示
在JSP文件中编写的所有HTML、CSS、JavaScript,对于JSP来说,只是普通的字符串。被翻译到:out.write(“翻译到这里”)
JSP文件修改后,不需要重新部署,也不需要重新启动Tomcat服务器
JSP文件第一次访问的时候为什么非常慢?
- 启动JSP翻译引擎
- 需要一个翻译过程
- 需要一个编译过程
- 需要Servlet对象创建过程
- init方法调用
- service方法调用
- …
为什么第2+N次访问jsp的时候非常快?
- 不需要重新翻译
- 不需要重新编译
- 不需要创建Servlet对象
- 直接调用Servlet对象的service方法
JSP也是单实例多线程环境下运行的一个Servlet对象
JSP文件会在什么时候会被重新翻译?
- jsp文件被修改时会被重新翻译
- 怎么确定jsp文件修改了呢?Tomcat服务器会记录jsp文件的最后修改时间