# JSP 指令 - `page`，`include`和`TagLib`

> 原文： [https://beginnersbook.com/2013/05/jsp-tutorial-directives/](https://beginnersbook.com/2013/05/jsp-tutorial-directives/)

指令控制整个 JSP 页面的处理。它向服务器提供有关页面处理的指示。

**指令语法：**

```html
 <%@ directive name [attribute name=“value” attribute name=“value” ........]%>
```

**JSP 中有三种类型的指令：**

1）`page`指令

2）`include`指令

3）`TagLib`指令

## 1）`page`指令

有几个属性，与`page`指令一起使用，它们是：

+   `import`
+   `session`
+   `isErrorPage`
+   `errorPage`
+   `ContentType`
+   `isThreadSafe`
+   `extends`
+   `info`
+   `language`
+   `autoflush`
+   `buffer`

### 1.`import`

此属性用于导入包。在进行编码时，您可能需要包含多个包。在这种情况下，此`page`指令的属性非常有用，因为它允许您在逗号（`,`）之间用同一位置提及多个包。或者，您可以拥有多个页面元素实例，每个实例都包含不同的包。

**导入属性的语法：**

```html
<%@page import="value"%>
```

这里的值是包名。

**导入示例：** 以下是如何使用`page`指令的`import`属性导入多个包的示例。

```html
 <%@page import="java.io.*%>
 <%@page import="java.lang.*%>
 <%--Comment: OR Below Statement: Both are Same--%>
 <%@page import="java.io.*, java.lang.*"%>
```

### 2.`session`

通常在构建用户交互式 JSP 应用时，我们确保允许用户访问以获取他/她的个人数据，直到会话处于活动状态。考虑一个登录到您的银行帐户的示例，我们可以访问您的所有数据，直到我们退出（或会话到期）。为了维护页面的会话，会话属性应为`true`。

此属性用于处理 JSP 页面的 HTTP 会话。它可以有两个值：`true`或`false`。会话属性的默认值为`true`，这意味着如果您不提及此属性，则服务器可能会认为此页面需要 HTTP 会话。

**此属性的默认值**：`true`

**会话属性语法：**

```html
<%@ page session="value"%>
```

这里的值是是`true`或者`false`

**会话示例：**

```html
<%@ page session="true"%>
```

上面的代码将允许页面具有`session`隐式对象。

```html
<%@ page session="false"%>
```

如果在 JSP 页面中指定了此代码，则意味着`session`对象将不可用于该页面。因此，无法为该页面维护会话。

### 3. `isErrorPage`

此属性用于指定当前 JSP 页面是否可用作另一个 JSP 页面的错误页面。如果`isErrorPage`的值为`true`，则表示该页面可用于其他页面的异常处理。通常，这些页面具有错误/警告消息或异常处理代码，并且当发生异常时由另一个 JSP 页面调用。

`isErrorPage`属性还有另一种用法 - [`exception`隐式对象](https://beginnersbook.com/2013/11/jsp-implicit-object-exception-with-examples/)只能用于`isErrorPage`设置为`true`的那些页面。如果值为`false`，则页面不能使用`exception`隐式对象。

**默认值**： `false`

**`isErrorPage`属性的语法：**

```html
<%@ page isErrorPage="value"%>
```

这里的值是`true`或`false`。

**`isErrorPage`示例：**

```html
<%@ page isErrorPage="true"%>
```

这使得 JSP 页面成为异常处理页面。

### 4. `errorPage`：

如上所述，当`isErrorPage`属性对于特定页面为`true `时，则表示在异常情况下该页面可以被另一个页面调用。`errorPage`属性用于指定将`isErrorPage`属性设置为`true`的 JSP 页面的 URL。它处理页面中未处理的异常。

**`errorPage`属性的语法：**

```html
<%@ page errorPage="value"%>
```

这里的值是一个 JSP 页面名称，它具有异常处理代码（并且`isErrorPage`设置为`true`）。

**`errorPage`示例：**

```html
<%@ page errorPage="ExceptionHandling.jsp"%>
```

这意味着如果在放置此代码的 JSP 页面上发生任何异常，则需要调用`ExceptionHandling.jsp`（此页面应具有`isErrorPage true`）页面。

### 5. `contentType`

此属性用于设置 JSP 页面的内容类型。

**默认值**：`text/html`

**`contentType`属性的语法：**

```html
<%@ page contentType="value"%>
```

这里内容类型的值可以是诸如：`text/html`，`text/xml`等。

**`contentType`示例：**

下面的代码可用于`text/html`页面。

```html
<%@ page contentType="text/html"%>
```

对于基于`text/xml`的页面：

```html
<%@ page contentType="text/xml"%>
```

### 6. `isThreadSafe`

让我们通过一个例子来理解这一点。假设您已经创建了一个 JSP 页面并将`isThreadSafe`提到为`true`，这意味着 JSP 页面支持多线程（多个线程可以同时执行 JSP 页面）。另一方面，如果将其设置为`false`，则 JSP 引擎将不允许多线程，这意味着只有单个线程将执行页面代码。

**`isThreadSafe`属性的默认值**：`true`。

**`isThreadSafe`属性的语法：**

```html
<%@ page isThreadSafe="value"%>
```

这里的值可以是`true`或`false`。

**`isThreadSafe`示例：**

```html
<%@ page isThreadSafe="false"%>
```

只有一个线程负责 JSP 页面执行。

### 7. `buffer`

此属性用于指定缓冲区大小。如果在编码期间将此值指定为`none`，则输出将由`JSPWriter`直接写入`Response`对象。并且，如果指定缓冲区大小，则输出首先写入缓冲区，然后它将可用于`response`对象。

**`buffer`属性的语法：**

```html
<%@ page buffer="value"%>
```

值为**大小（单位为 KB）**或`none`。

**缓冲区示例：**

此页面没有缓冲区：

```html
<%@ page buffer="none"%>
```

页面的 5 kb 缓冲区大小，代码如下：

```html
<%@ page buffer="5kb"%>
```

### 8. `extends`

像 java 一样，这里的属性也用于扩展（继承）类。

**`extends`属性的语法：**

```html
<%@ page extends="value"%>
```

值为`package_name.class_name`。

**延伸示例：**

下面的代码将从包中继承`SampleClass.mypackage`

```html
<%@ page extends="mypackage.SampleClass"%>
```

### 9. `info`

它提供了对 JSP 页面的描述。当我们调用`getServletInfo()`方法时，`info`中指定的字符串将返回。

**`info`语法：**

```html
<%@ page info="value"%>
```

这里的值是消息或描述

**`info`属性示例：**

```html
<%@ page info="This code is given by Chaitanya Singh"%>
```

### 10. `language`    

它指定页面中使用的脚本语言（基础语言）。

**`language`语法：**

```html
<%@ page language="value"%>
```

值是这里的脚本语言。

**语言属性示例：**

```html
<%@ page language="java"%>
```

### 11. `autoFlush`

如果为`true`，则表示缓冲区应该在满时刷新。当缓冲区溢出时，`false`将抛出异常。

**默认值**：`true`

**`autoFlush`的语法：**

```html
<%@ page autoFlush="value"%>
```

值可以是`true`或`false`。

**`autoFlush`属性示例：**

缓冲区将在满时刷新：

```html
<%@ page autoFlush="true"%>
```

由于溢出条件，缓冲区满时会抛出异常

```html
<%@ page autoFlush="true"%>
```

### 12. `isScriptingEnabled`

它已被删除而未被使用。

### 13. `isELIgnored`

此属性指定是否评估表达式。

**默认值**：`true`

**`isELIgnored`的语法：**

```html
<%@ page isELIgnored="value"%>
```

value can be true or false.

**`isELIgnored`属性示例：**

JSP 页面中存在的任何表达式都不会被评估：

```html
<%@ page isELIgnored="false"%>
```

将评估表达式（`true`是默认值，因此无需指定）：

```html
<%@ page isELIgnored="true"%>
```

## 2）`include`指令

`Include`指令用于将一个 JSP 页面的内容复制到另一个 JSP 页面。这就像将一个文件的代码包含在另一个文件中。

**`include`指令的语法：**

```html
<%@include file ="value"%>
```

这里的值是需要包含的 JSP 文件名。如果文件位于同一目录中，则只需指定文件名，否则需要在值字段中提及完整的 URL（或路径）。

**注意：它可以在页面的任何地方使用。**

**示例：**

```html
<%@include file="myJSP.jsp"%>
```

您可以在 JSP 页面中使用上述代码来复制`myJSP.jsp`文件的内容。但是，在这种情况下，两个 JSP 文件必须位于同一目录中。如果`myJSP.jsp`位于不同的目录中，那么您需要在上面的代码中指定完整路径，而不仅仅是文件名。

**必须通过示例详细阅读**：[`Include`指令](https://beginnersbook.com/2013/11/jsp-include-directive/ "Include directive")。

## 3）`Taglib`指令

该指令基本上允许用户在 JSP 中使用`Custom`标签。我们将在即将到来的 JSP 教程中详细讨论`Custom`标签。`Taglib`指令可帮助您在 JSP 页面中声明自定义标签。

**`Taglib`指令语法：**

```html
<%@taglib uri ="taglibURI" prefix="tag prefix"%>
```

其中 URI 是统一资源定位符，用于标识自定义标签的位置，标签前缀是一个字符串，可以标识 URI 标识的位置中的自定义标签。

**`Targlib`的例子：**

```html
<%@ taglib uri="http://www.sample.com/mycustomlib" prefix="demotag" %>
<html>
<body>
<demotag:welcome/>
</body>
</html>
```

如您所见，URI 具有自定义标签库的位置，前缀标识自定义标签的前缀。

注意：在上面的例子中 - `<demotag:welcome>`有一个前缀`demotag`。