JSP

发布时间 2023-08-17 17:03:07作者: weiwei0123
JSP

JSP到底是什么

JSP(Java Server Pages)是一种动态网页开发技术。JSP 文件就是在传统的 HTML文件 中插入 Java代码JSP标签,后缀名为.jsp

JSP 与 PHP、ASP、ASP.NET 等语言类似,都运行在服务端。通常返回给客户端的就是一个 HTML 文件,因此只要有浏览器就能查看 JSP 页面。

JSP 使用 JSP 标签在 HTML 网页中插入 Java 代码,<%         //Java代码         %>,标签常以<%开头,%>结束。JSP 标签有多种功能,比如访问数据库和 JavaBean 组件等,还可以在不同的网页之间传递和共享信息。

JSP 是 Servlet 的扩展,我们可以在 JSP 中使用 Servlet 的所有功能。另外,JSP 还提供了一些其他功能,例如 EL 表达式、自定义标签等。

JSP 依赖于 Servlet,用户访问 JSP 页面时,JSP 代码会被翻译成 Servlet 代码,最终,以字符串的形式向外输出 HTML 代码。所以,JSP 只是在 Servlet 的基础上做了进一步封装

JSP 通过表单获取用户输入的数据访问数据库或其它数据源生成动态的 Web 内容。

JSP 具有以下特点:
JSP 具有 Servlet 的所有优点,例如 JSP 文件跨平台,即一次编写,处处运行。
JSP 比 CGI 性能更加优越,因为 JSP 可以直接在 HTML 中嵌入标签,而 CGI 需要单独引用 CGI 文件。
JSP 比 Servlet 更易于维护,JSP 将业务逻辑与网页设计分离,使其更加灵活。
使用 JSP,Web 开发人员可以更注重于网页设计,Java 开发人员可以更注重于逻辑处理。

JSP的由来
1997 年,Sun 公司推出了 Servlet。由于当时的 Java Web 层体系结构中只有 Servlet,所以接收用户请求、处理业务逻辑、生成 HTML 代码等都在 Servlet 中完成。Servlet 不能像 PHP、ASP 等语言镶嵌 HTML 代码,因此输出 HTML 比较困难,且部署过程复杂。

为了克服 Servlet 的这些弱点,1999 年初,Sun 公司推出了 JSP。在生成 HTML 代码方面 JSP 比 Servlet 方便许多,而且不需要特殊部署,只需要复制到服务器下面即可运行。简而言之,JSP 就是为了简化 Servlet 工作而出现的替代品。

JSP 包括很多技术,包括 Java Bean、自定义标签(Custom Tags)、EL 表达式(Expression Language)、JSTL 标准标签类库(Java Standard Tag Library)等。这些强大成熟的技术使得 JSP 在视图层(View)具有很大的优势。

Servlet与JSP异同点
相同点:与 Servlet 一样,JSP 也用于生成动态网页。

不同点如下:

序号 Servlet JSP
1 Servlet 在 Java 内添加 HTML 代码 JSP 在 HTML 内添加 Java 代码
2 Servlet 是一个 Java 程序,支持 HTML 标签 JSP 是一种 HTML 代码,支持 Java 语句
3 Servlet 一般用于开发程序的业务层(做一些复杂的逻辑处理) JSP 一般用于开发程序的表示层(显示数据)
4 Servlet 由 Java 开发人员创建和维护 JSP 常用于页面设计,由 Web 开发人员使用

JSP相对于Servlet的优点
1)易于维护
相对于 Servlet 来说,JSP 更易于管理。在 JSP 中,我们可以轻松地将业务逻辑与网页设计分开,而在 Servlet 技术中,它们是混合在一起的。
2)快速开发:无需重新编译和部署
JSP 页面被修改后,不需要重新编译和部署项目。而 Servlet 被修改后,需要重新编译和部署。
3)代码简洁
在 JSP 中,我们可以使用 EL表达式、JSTL标准标签类库、自定义标签、隐式对象等,能够有效的减少代码。

JSP生命周期

JSP 生命周期定义了 JSP 从创建到销毁的整个过程。这类似于 Servlet 生命周期,不同的是,JSP 需要先被编译成 Servlet。

JSP 生命周期阶段如下:
编译
初始化(容器调用 jspInit() 方法)
执行(容器调用 _jspService() 方法)
销毁(容器调用 jspDestroy() 方法)

JSP生命周期

  1. JSP编译
    当浏览器请求 JSP 时,JSP 容器会首先检查是否需要编译页面。如果该页面从未被编译过,或者自上次编译以来对其进行了修改,则编译该页面。
    JSP 本质是 Servlet,因此 JSP 容器就是 Servlet 容器。

编译过程包括 3 个步骤:
解析 JSP:JSP 容器解析 JSP 文件,查看是否有语法错误
翻译 JSP:JSP 容器把 JSP 文件翻译为 Servlet 类
编译 Servlet
2. JSP初始化
当容器加载 JSP 时,它将在处理任何请求之前调用 jspInit() 方法。如果您需要自定义 JSP 的初始化内容,可以重写 jspInit() 方法。

public void jspInit(){
   // ...
}

一般情况下,程序只初始化一次。与 Servlet init 方法一样,我们通常在 jspInit() 方法中初始化数据库连接、打开文件。
3. JSP执行
此阶段表示了 JSP 生命周期中所有与请求相关的交互行为,直到被销毁。

JSP 页面完成初始化后,JSP 将会调用 _jspService() 方法。

_jspService() 以 HttpServletRequest 对象和 HttpServletResponse 对象作为方法参数,如下所示:
void _jspService(HttpServletRequest request, HttpServletResponse response) {
   // ...
}

JSP 的 _jspService() 方法根据 request 来生成相应的 response,并且它还负责生成对 HTTP 方法的响应,即 GET、POST、DELETE 等。
4. JSP销毁
JSP 生命周期的销毁阶段表示从容器中删除 JSP。

jspDestroy() 方法等效于 Servlet 中的 destroy() 方法。如果您需要自定义 JSP 的销毁内容,可以重写 jspDestroy() 方法。

jspDestroy() 方法具有以下形式。

public void jspDestroy() {
   ...
}

通常我们在 jspDestroy() 方法中释放数据库连接、关闭打开的文件。