一、原理
JSP 就是 Java Server Pages,Java 服务端页面
JSP = HTML + Java,用于简化开发的,本质上就是一个 Servlet
JSP 由两部分组成:
- 静态部分:包含标准的 HTML 标签和静态页面,和 HTML 基本一致
- 动态部分:包含需要从数据库中读取或需要动态生成的内容,实际就是通过 Java 代码产生的数据内容
JSP 页面由系统编译成 Servlet,Servlet 再负责响应用户的请求。自己编写的 JSP 代码应该放在 web 应用的 WEB-INF 路径下,Servlet 容器会对该文件进行编译,生成两个文件,分别是 .java 文件和 .class 文件,被放在 work 路径下的对应的 web 应用内
JSP 页面的执行原理:
二、生命周期
JSP 生命周期就是从创建到销毁的整个过程,类似于 servlet 生命周期,区别在于 JSP 生命周期还包括将 JSP 文件编译成 servlet
JSP 生命周期所走过的几个阶段:
- 编译阶段:servlet 容器编译 servlet 源文件,生成 servlet 类
- 初始化阶段:加载与 JSP 对应的 servlet 类,创建其实例,并调用它的初始化方法
- 执行阶段:调用与 JSP 对应的 servlet 实例的服务方法
- 销毁阶段:调用与 JSP 对应的 servlet 实例的销毁方法,然后销毁 servlet 实例
三、基本语法
1. JSP 声明
JSP 声明用来声明方法和变量:<%!声明部分%>
-
在 JSP 中不能声明抽象方法
-
在 JSP 中声明的方法和变量被所有客户端所共享
2. JSP 输出表达式
<%=num%>
等价于
<%out.println(num)%>
-
等号就相当于 Java 中的输出语句
-
输出表达式后不能有分号
3. JSP 小脚本
使用 JSP 小脚本可以包括任何可执行的 Java 代码,但是在这里面声明的变量是局部变量,需要满足在 Java 中对局部变量的约束
eg:
<table>
<%
for(int i = 0;i < 5;i++){
%>
<tr>
<td>循环值:</td>
<td><%=i%></td>
</tr>
<%
}
%>
</table>
四、JSP 九大内置对象
| 对象 | 描述 | 类型 | 作用域 |
|---|---|---|---|
| request | HttpServletRequest 类的实例,代表 HTTP 请求的对象,包含客户端发送到服务器的信息,如表单数据、URL参数等 | javax.servlet.ServletRequest | Request |
| response | HttpServletResponse 类的实例,代表 HTTP 响应的对象,用于向客户端发送数据和响应 | javax.servlet.SrvletResponse | Page |
| pageContext | PageContext 类的实例,提供对 JSP 页面所有对象以及命名空间的访问 | javax.servlet.jsp.PageContext | Page |
| session | HttpSession 类的实例,代表用户会话的对象,可用于存储和检索用户特定的数据,跨多个页面 | javax.servlet.http.HttpSession | Session |
| application | ServletContext 类的实例,代表 Web 应用程序的上下文,可以用于存储和检索全局应用程序数据 | javax.servlet.ServletContext | Application |
| out | JspWriter 类的实例,用于向客户端输出文本内容的对象,通常用于生成 HTML | javax.servlet.jsp.JspWriter | Page |
| config | ServletConfig 类的实例,包含有关当前 JSP 页面的配置信息,例如初始化参数 | javax.servlet.ServletConfig | Page |
| page | 类似于 Java 类中的 this 关键字,代表当前 JSP 页面的实例,可以用于调用页面的方法 | javax.lang.Object | Page |
| exception | exception 类的对象,代表发生错误的 JSP 页面中对应的异常对象,用于处理 JSP 页面中的异常情况,可用于捕获和处理页面中发生的异常 | javax.lang.Throwable | Page |