💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 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`。