JSP 指令
什么是 JSP 指令?
- JSP 指令是给 JSP 容器的消息。它们提供有关整个 JSP 页面的全局信息。
- JSP 指令用于向容器提供特殊指令,以将 JSP 翻译为 servlet 代码。
- 在 JSP 生命周期阶段,JSP 需要转换为 servlet,这是翻译阶段。
- 它们向容器提供关于如何处理 JSP 处理某些方面的指令。
- 指令可以通过逗号分隔的键值对拥有多个属性。
- 在 JSP 中,指令用
<%@ %>
标签描述。
指令的语法
<%@ directive attribute="" %>
JSP 中的指令类型
JSP 中有三种类型的指令
- 页面指令
- include 指令
- taglib 指令
下面将详细介绍其中的每一种,并附带示例。
1) JSP 页面指令
页面指令的语法
<%@ page…%>
- 它提供了适用于整个 JSP 页面的属性。
- 它定义了页面相关的属性,例如脚本语言、错误页面和缓冲要求。
- 它用于向容器提供与当前 JSP 页面相关的指令。
以下是与页面指令相关的属性列表:
- 语言
- extends
- import
- contentType
- info
- session
- isThreadSafe
- autoflush
- buffer
- isErrorPage
- pageEncoding
- errorPage
- isELIgonored
更多关于每个属性的详细信息
1) language:它定义了页面中使用的 编程语言(底层语言)。
language 的语法
<%@ page language="value" %>
这里的 value 是编程语言(底层语言)。
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
代码解释:在上面的示例中,language 属性的值是 Java,在本例中是底层语言。因此,表达式标签中的代码将使用 java 编译器进行编译。
2) extends:此属性用于像 JAVA 那样扩展(继承)类。
extends 的语法
<%@ page extends="value" %>
这里 value 表示要从中继承的类。
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page extends="demotest.DemoClass" %>
代码解释:在上面的代码中,JSP 正在扩展 demotest 包中的 DemoClass,它将扩展类的所有功能。
3) import:此属性是页面指令属性中最常用的属性。它用于在生成 servlet 代码时通知容器导入其他 java 类、接口、枚举等。它类似于 java 类、接口中的 import 语句。
import 的语法:
<%@ page import="value" %>
这里 value 指示要导入的类。
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" import="java.util.Date" pageEncoding="ISO-8859-1"%>
代码解释
在上面的代码中,我们从 java.util 包导入了 Date 类(所有实用工具类),并且可以使用该类的所有方法。
4) contentType:
- 它定义了字符编码方案,即它用于设置响应的内容类型和字符集。
- 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"%>
代码解释
在上面的代码中,content type 设置为 text/html,它为 JSP 和生成的响应页面设置了字符编码。
5) info
- 它定义了一个可以被 getServletInfo() 方法访问的字符串。
- 此属性用于设置 servlet 描述。
info 的语法
<%@ page info="value" %>
这里,value 表示 servlet 信息。
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" info="Guru Directive JSP" pageEncoding="ISO-8859-1"%>
代码解释
在上面的代码中,字符串“Guru Directive JSP”可以通过 getServletInfo() 从 servlet 接口检索。
6) session
- JSP 页面默认会创建 session。
- 有时我们不需要在 JSP 中创建 session,因此,在这种情况下,我们可以将此属性设置为 false。session 属性的默认值是 true,并且会创建 session。当将其设置为 false 时,我们可以指示编译器默认不要创建 session。
session 的语法
<%@ page session="true/false"%>
在这种情况下,session 属性可以设置为 true 或 false。
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" session="false"%>
代码解释
在上面的示例中,session 属性设置为“false”,因此我们指示不希望在此 JSP 中创建任何 session。
7) isThreadSafe
- 它定义了生成 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) AutoFlush
此属性指定是否自动刷新缓冲的输出,该属性的默认值为 true。如果值设置为 false,缓冲区将不会自动刷新,如果满了,我们将收到一个异常。当缓冲区为 none 时,false 是不合法的,也没有缓冲,因此它将被自动刷新。
autoFlush 的语法
<% @ page autoFlush="true/false" %>
这里 true/false 表示是否需要缓冲。
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" autoFlush="false"%>
代码解释
在上面的代码中,autoflush 设置为 false,因此不会进行缓冲,并且需要手动刷新输出。
9) Buffer
- 使用此属性可以缓冲输出响应对象。
- 我们可以使用此属性定义要进行的缓冲大小,默认大小为 8KB。
- 它指示 servlet 在写入响应对象之前先写入缓冲区。
buffer 的语法
<%@ page buffer="value" %>
这里 value 表示要定义的缓冲区大小。如果没有缓冲区,我们可以写成 none,如果我们不指定任何值,则默认值为 8KB。
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" buffer="16KB"%>
代码解释
在上面的代码中,buffer 大小指定为 16KB,其中缓冲区的大小就是该大小。
10) isErrorPage
- 它指示 JSP 页面将在另一个 JSP 页面中检查 errorPage。
- 任何声明了“isErrorPage”属性的 JSP 文件都可以接收具有 errorPage 属性的其他 JSP 页面的异常。
- 只有这些页面才能获得异常。
- 默认值为 false。
isErrorPage 的语法
<%@ page isErrorPage="true/false"%>
示例
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isErrorPage="true"%>
代码解释
在上面的代码中,isErrorPage 设置为 true。因此,它将检查任何其他具有 errorPage(在下一个属性中描述)属性设置的 JSP,并且可以处理异常。
11) PageEncoding
“pageEncoding”属性定义了 JSP 页面的字符编码。如果未指定其他编码,则默认指定为“ISO-8859-1”。
pageEncoding 的语法
<%@ page pageEncoding="vaue" %>
这里 value 指定了 JSP 的 charset 值。
示例
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" isErrorPage="true"%>
代码解释
在上面的代码中,“pageEncoding”已设置为默认 charset ISO-8859-1。
12) errorPage
如果 JSP 抛出异常,此属性用于为 JSP 页面设置错误页面,然后它会重定向到异常页面。
errorPage 的语法
<%@ page errorPage="value" %>
这里 value 表示 error JSP 页面的值。
示例
<%@ page language="java" contentType="text/html;" pageEncoding="ISO-8859-1" errorPage="errorHandler.jsp"%>
代码解释
在上面的代码中,我们使用 errroHandler.jsp 来处理异常。
13) isELIgnored
- 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:这里我们定义了四个属性,即:
- Language:设置为 Java 作为编程语言。
- contentType:设置为 text/html,告知编译器 HTML 应该被格式化。
- pageEncoding:在此属性中设置了默认 charset。
- isELIgnored:表达式标签为 false,因此未被忽略。
代码行 3:这里我们使用了 import 属性,它导入了 Java util 包中的“Date 类”,并且我们正在尝试在代码中显示当前日期。
执行上述代码后,您将得到以下输出:
输出:
- 日期是:使用 date 类的 date 方法的当前日期
2) JSP include 指令
- JSP “include directive”(代码行 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>
代码解释
Directive_jsp2.jsp
代码行 3:在此代码中,我们使用 include 标签,将 directive_header_jsp3.jsp 文件包含到主文件 (_jsp2.jsp) 中,并获取主文件和包含文件的输出。
Directive_header_jsp3.jsp
代码行 11-12:我们取了一个初始化为 1 的变量,然后对其进行递增。这将按如下方式在主文件中给出输出。
当您执行上述代码时,您会得到以下输出
输出
- 输出是:Header file: 2 : This is the main file
- 输出是从 directive_jsp2.jsp 文件执行的,而 directive_header_jsp3.jsp 包含的文件将首先被编译。
- 包含文件完成后,将执行主文件,输出将来自主文件“This is the main file”。因此,您将从 _jsp3.jsp 获得输出“Header file: 2”,从 _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”是定义的自定义标签,可以在任何地方使用。