JSP 指令
什么是 JSP 指令?
- JSP 指令是发送给 JSP 容器的消息。它们提供有关整个 JSP 页面的全局信息。
- JSP 指令用于向容器提供特殊指令,以将 JSP 转换为 servlet 代码。
- 在 JSP 生命周期阶段,JSP 必须转换为 servlet,即翻译阶段。
- 它们向容器提供如何处理 JSP 处理某些方面的指令
- 指令可以具有多个属性,以逗号分隔为键值对。
- 在 JSP 中,指令描述为
<%@ %>
标签。
指令语法:
<%@ directive attribute="" %>
JSP 中的指令类型
JSP 中有三种类型的指令:
- 页面指令
- Include 指令
- Taglib 指令
下面通过示例详细描述每一个:
1)JSP页面指令
Page 指令的语法:
<%@ page…%>
- 它提供应用于整个 JSP 页面的属性。
- 它定义了页面相关的属性,例如脚本语言、错误页面和缓冲要求。
- 它用于向与当前 JSP 页面相关的容器提供指令。
以下是与页面指令相关的属性列表:
- 语言
- 扩展
- 导入模板
- 内容类型
- info
- 会议
- 线程安全
- 自动冲洗
- 缓冲
- 错误页面
- 页面编码
- 错误页面
- 被忽略
有关每个属性的更多详细信息
1)语言:它定义了 编程语言 (底层语言)正在页面中使用。
语言语法:
<%@ page language="value" %>
此处的值是编程语言(底层语言)
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
代码说明: 在上面的例子中,属性语言值是 Java 在这种情况下,这是底层语言。因此,表达式标签中的代码将使用 java 编译器进行编译。
2)扩展:此属性用于像JAVA一样扩展(继承)类
扩展的语法:
<%@ page extends="value" %>
这里的值代表必须从中继承的类。
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page extends="demotest.DemoClass" %>
代码说明: 在上面的代码中,JSP 扩展了 demotest 包内的 DemoClass,并且它将扩展所有类功能。
3)导入:此属性是页面指令属性中最常用的属性。它用于告诉容器在生成 servlet 代码时导入其他 java 类、接口、枚举等。它类似于 java 类、接口中的 import 语句。
import 的语法:
<%@ page import="value" %>
此处的值表示必须导入的类。
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="java.util.Date" pageEncoding="ISO-8859-1"%>
代码说明:
在上面的代码中,我们从 java.util 包(所有实用程序类)导入 Date 类,它可以使用以下类的所有方法。
4)内容类型:
- 它定义字符编码方案,即用于设置响应的内容类型和字符集
- contentType 的默认类型是
"text/html; charset=ISO-8859-1"
.
contentType 的语法:
<%@ page contentType="value" %>
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
代码说明:
在上面的代码中,内容类型设置为text/html,它为JSP和生成的响应页面设置字符编码。
5)信息
- 它定义了一个可以通过 getServletInfo() 方法访问的字符串。
- 该属性用于设置 servlet 描述。
信息的语法:
<%@ page info="value" %>
此处的值代表 servlet 信息。
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" info="Guru Directive JSP" pageEncoding="ISO-8859-1"%>
代码说明:
在上面的代码中,可以使用 getServletInfo() 通过 servlet 接口检索字符串“Guru Directive JSP”
6)会议
- JSP页面默认创建session。
- 有时我们不需要在 JSP 中创建会话,因此,在这种情况下,我们可以将此属性设置为 false。session 属性的默认值为 true,并且会创建会话。当它设置为 false 时,我们可以指示编译器默认不创建会话。
会话的语法:
<%@ page session="true/false"%>
在这种情况下,会话属性可以设置为 true 或 false
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" session="false"%>
代码说明:
在上面的例子中,会话属性设置为“false”,因此我们表示不想在此 JSP 中创建任何会话
7)线程安全:
- 它定义了生成的 servlet 的线程模型。
- 它表明页面中实现的线程安全级别。
- 它的默认值是 true,因此同时
- 我们可以使用此属性在生成的 servlet 中实现 SingleThreadModel 接口。
- 如果我们将其设置为 false,那么它将实现 SingleThreadModel 并可以访问任何共享对象,并可能产生不一致。
isThreadSafe 的语法:
<% @ page isThreadSafe="true/false" %>
这里的 true 或 false 代表是否存在同步,则设置为 true,否则设置为 false。
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isThreadSafe="true"%>
代码说明:
在上面的代码中,isThreadSafe设置为“true”,因此将完成同步,并且可以使用多个线程。
8) 自动冲洗:
此属性指定是否应自动刷新缓冲输出,该属性的默认值为 true。如果将该值设置为 false,则不会自动刷新缓冲区,如果缓冲区已满,我们将收到异常。当缓冲区为 none 时,false 是不合法的,并且没有缓冲,因此将自动刷新。
autoFlush 的语法:
<% @ page autoFlush="true/false" %>
这里的 true/false 表示是否必须进行缓冲
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" autoFlush="false"%>
代码说明:
在上面的代码中,自动刷新被设置为 false,因此不会进行缓冲,并且必须手动刷新输出。
9) Buffer:
- 使用此属性可以缓冲输出响应对象。
- 我们可以使用此属性定义要进行的缓冲的大小,默认大小为 8KB。
- 它指示 servlet 在写入响应对象之前写入缓冲区。
缓冲区的语法:
<%@ page buffer="value" %>
这里的数值表示必须定义的缓冲区的大小。如果没有缓冲区,那么我们可以写为 none,如果我们不指定任何值,则默认值为 8KB
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" buffer="16KB"%>
代码说明:
在上面的代码中,缓冲区大小为 16KB,其中缓冲区就是这个大小
10)isErrorPage:
- 表示存在错误页面的 JSP 页面将在另一个 JSP 页面中进行检查
- 任何使用“isErrorPage”属性声明的 JSP 文件都能够从具有错误页面的其他 JSP 页面接收异常。
- 仅这些页面可获例外。
- 默认值为 false。
isErrorPage 的语法:
<%@ page isErrorPage="true/false"%>
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isErrorPage="true"%>
代码说明:
在上面的代码中,isErrorPage 被设置为 true。因此,它将检查其他 JSP 是否设置了 errorPage(在下一个属性中描述)属性,并且它可以处理异常。
11)页面编码:
“pageEncoding”属性定义JSP页面的字符编码。如果没有指定其他编码,则默认为“ISO-8859-1”。
pageEncoding 的语法:
<%@ page pageEncoding="vaue" %>
此处的值指定 JSP 的字符集值
计费示例:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isErrorPage="true"%>
代码说明:
在上面的代码中,“pageEncoding”已设置为默认字符集 ISO-8859-1
12)错误页面:
此属性用于为JSP页面设置错误页面,如果JSP抛出异常则重定向到异常页面。
errorPage 的语法:
<%@ page errorPage="value" %>
此处的值表示错误 JSP 页面值
计费示例:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" errorPage="errorHandler.jsp"%>
代码说明:
在上面的代码中,为了处理异常,我们有 errroHandler.jsp
13)是否被忽略:
- IsELIgnored 是一个标志属性,我们必须决定是否忽略 EL 标签。
- 其数据类型为java enum,默认值为false,因此默认启用EL。
isELIgnored 的语法:
<%@ page isELIgnored="true/false" %>
这里,true/false 代表 EL 的值是否应该被忽略。
计费示例:
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="true"%>
代码说明:
在上面的代码中,isELIgnored 为 true,因此 表达语言 (EL) 此处忽略。在下面的示例中,我们使用了四个属性(代码行 1-2)
具有四个属性的示例
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isELIgnored="false"%> <%@page import="java.util.Date" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Directive Guru JSP1</title> </head> <body> <a>Date is:</a> <%= new java.util.Date() %> </body> </html>
代码说明:
代码行1-2: 这里我们定义了四个属性,即
- 语言:设置为 Java 作为编程语言
- contentType:设置为 text/html 以告诉编译器 html 必须格式化
- pageEncoding:此属性中设置默认字符集
- isELIgnored:表达式标记为假,因此不会被忽略。
代码行3: 这里我们使用了 import 属性,它导入的是来自 Java util 包,我们正在尝试在代码中显示当前日期。
执行上述代码时,你将得到以下输出
输出:
- 日期为:使用日期类的日期方法获取当前日期
2)JSP Include指令
- JSP“include 指令”(代码行 8)用于将一个文件包含到另一个文件中
- 这个包含的文件可以是 HTML、JSP、文本文件等等。
- 它还有助于创建具有用户视图的模板并将页面分成页眉和页脚以及侧边栏操作。
- 包括翻译阶段的文件
include 指令的语法:
<%@ include….%>
计费示例:
Directive_jsp2.jsp(主文件)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ include file="directive_header_jsp3.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Directive JSP2</title> </head> <body> <a>This is the main file</a> </body> </html>
Directive_header_jsp3.jsp(包含在主文件中)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <a>Header file : </a> <%int count =1; count++; out.println(count);%> : </body> </html>
代码说明:
指令_jsp2.jsp:
代码行3: 在此代码中,我们使用包含标签,将文件 directive_header_jsp3.jsp 包含到主文件(_jsp2.jsp)中,并获取主文件和包含文件的输出。
指令_header_jsp3.jsp:
代码行11-12: 我们已经将变量 count 初始化为 1,然后将其递增。这将在主文件中给出如下所示的输出。
执行上述代码时,您将获得以下输出:
输出:
- 输出是头文件:2:这是主文件
- 输出从 directive_jsp2.jsp 文件执行,而 directive_header_jsp3.jsp 包含的文件将首先被编译。
- 包含文件完成后,将执行主文件,主文件的输出将是“This is the main file”。因此,您将从 _jsp2.jsp 获得“Header file: 3”的输出,并从 _jsp2.jsp 获得“This is main file”的输出。
3)JSP Taglib 指令
- JSP taglib指令用于定义以“taglib”为前缀的标签库,我们可以在 JSP.
- JSP 自定义标签部分将介绍更多详细信息
- JSP taglib 指令用于在使用 JSP 标准标签库的 JSP 页面中
- 它使用一组自定义标签,识别库的位置并提供在 JSP 页面中识别自定义标签的方法。
taglib 指令的语法:
<%@ taglib uri="uri" prefix="value"%>
这里“uri”属性是标签库描述符中的唯一标识符,“prefix”属性是标签名称。
计费示例:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="gurutag" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Directive JSP</title> <gurutag:hello/> </head> <body> </body> </html>
代码说明:
代码行3: 这里的“taglib”定义了属性uri和prefix。
代码行9: “gurutag” 是自定义标签,可以在任何地方使用