JSP 指令

什么是 JSP 指令?

  • JSP 指令是给 JSP 容器的消息。它们提供有关整个 JSP 页面的全局信息。
  • JSP 指令用于向容器提供特殊指令,以将 JSP 翻译为 servlet 代码。
  • 在 JSP 生命周期阶段,JSP 需要转换为 servlet,这是翻译阶段。
  • 它们向容器提供关于如何处理 JSP 处理某些方面的指令。
  • 指令可以通过逗号分隔的键值对拥有多个属性。
  • 在 JSP 中,指令用 <%@ %> 标签描述。

指令的语法

<%@ directive attribute="" %>

JSP 中的指令类型

JSP 中有三种类型的指令

  1. 页面指令
  2. include 指令
  3. taglib 指令

下面将详细介绍其中的每一种,并附带示例。

1) JSP 页面指令

页面指令的语法

<%@ page…%>
  • 它提供了适用于整个 JSP 页面的属性。
  • 它定义了页面相关的属性,例如脚本语言、错误页面和缓冲要求。
  • 它用于向容器提供与当前 JSP 页面相关的指令。

以下是与页面指令相关的属性列表:

  1. 语言
  2. extends
  3. import
  4. contentType
  5. info
  6. session
  7. isThreadSafe
  8. autoflush
  9. buffer
  10. isErrorPage
  11. pageEncoding
  12. errorPage
  13. 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 类”,并且我们正在尝试在代码中显示当前日期。

执行上述代码后,您将得到以下输出:

JSP Page Directive

输出:

  • 日期是:使用 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 的变量,然后对其进行递增。这将按如下方式在主文件中给出输出。

当您执行上述代码时,您会得到以下输出

JSP Include directive

输出

  • 输出是: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”是定义的自定义标签,可以在任何地方使用。