JSP page指令定义jsp页面属性

page指令用于定义jsp页面的各种属性,无论page指令出现在jsp页面的什么地方,他作用的都是整个jsp页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个页面的起始位置。

定义

<%@page
    [language="java"]
    [extends="package.class"]
    [import="{package.clas|package.*},..."]
    [contenType="TYPE;charset=CHARSET"]
    [session="True|False"]
    [buffer="none|8kb|sizekb"]
    [autoFlush="True|False"]
    [isThreadSafe="True|False"]
    [info="text"]
    [isErrorPage="True|False"]
%>

[language="java"]

声明脚本语言的种类,默认情况下为 java。

[extends="package.class"]

指定 JSP 页面所生成的 servlet 的超类(superclass )。这个属性一般为开发人员或提供商保留,由他们对页面的运作方式做出根本性的改变(如添加个性化特性)。一般人应该避免使用这个属性,除非引用由服务器提供商专为这种目的提供的类。

[import="{package.clas|package.*},..."]

使用 page 指令的 import 属性指定 JSP 页面转换成的 servlet 应该输入的包。在 JSP 中,包是绝对必需的。原因是,如果没有使用包,系统则认为所引用的类与当前类在同一个包中。默认情况下,servlet 导入一些服务器特有的包,例如:java.lang.*  javax.servlet.*  javax.servlet.jsp.*   javax.servlet.http.* 在编译时已导入了,不需要再指明。使用示例:<%@ page import="package.class" %><%@ page import="package.class1, ..., package.classN" %><%@ page import="java.uti1.*, cn.foololdfat.*" %>

[contenType="TYPE;charset=CHARSET"]

contentType 属性设置 Content-Type 响应报头,标明即将发送到客户程序的文档的 MIME 类型。默认 MIME 类型是 text/html,默认字符集为 ISO-8859-1。简单示例:改变内容类型:<%@ page contentType="text/html" %>;改变字符集:<%@ page pageEncoding="GBK" %>;改变内容类型和字符集:<%@ page contentType="text/html; charset=utf-8" %>

[session="True|False"]

控制页面是否参与 HTTP 会话。默认值为 true,若存在已有会话,则预定义变量 session (类型为HttpSession)应该绑定到现有的会话;否则,创建新的会话并将其绑定到 session。false 值表示不自动创建会话,在 JSP 页面转换成 servlet 时,对变量 session 的访问会导致错误。注意,session="false" 并不禁用会话跟踪,它只是阻止 JSP 页面为那些尚不拥有会话的用户创建新的会话。由于会话是针对用户,不是针对贞面,所以,关闭某个页面的会话跟踪没有任何益处,除非有可能在同一客户会话中访问到的相关页面都关闭会话跟踪。

[buffer="none|8kb|sizekb"]

buffer 的大小被 out 对象用于缓存处理执行后的 JSP 对客户端浏览器的输出。none 是指没有任何缓存,直接输出到客户端浏览器。用户可通过指定 buffer 的大小来指定缓存处理的大小,默认值为 8kb。

[autoFlush="True|False"]

控制当缓冲区充满之后,是应该自动清空输出缓冲区(默认true),还是在缓冲区溢出后抛出一个异常(autoFlush="false")。在 buffer="none" 时,false 值是不合法的。

[isThreadSafe="True|False"]

设置 JSP 文件是否多线程使用。若为 True,那么一个 JSP 能同事处理多个用户的请求,默认值为 True。

[info="text"]

定义一个可以在 servlet 中通过 getServletInfo 方法获取的字符串。在 JSP 被执行时,用来描述当前 JSP 文件的相关信息。

[isErrorPage="True|False"]

是否使用 exception 对象。

属性

1. import 属性

使用 page 指令的 import 属性指定 JSP 页面转换成的 servlet 应该输入的包。在 JSP 中,包是绝对必需的。原因是,如果没有使用包,系统则认为所引用的类与当前类在同一个包中。使用 import 属性时,可以采用下面两种形式:

<%@ page import="package.class" %>
<%@ page import="package.class1, ..., package.classN" %>

例如,下面的指令表示 java.util 包和 cn.foololdfat 包中的所有类在使用时无需给出明确的包标识符:

<%@ page import="java.uti1.*, cn.foololdfat.*" %>

import 是 page 的属性中惟一允许在同一文档中多次出现的属性。尽管 page 指令可以出现在文档中的任何地方,但一般不是将 import 语句放在文档顶部附近,就是放在相应的包首次使用之前。

2. extends 属性

extends 属性指定 JSP 页面所生成的 servlet 的超类(superclass )。它采用下面的形式:

<%@ page extends="package.class" %>

这个属性一般为开发人员或提供商保留,由他们对页面的运作方式做出根本性的改变(如添加个性化特性)。一般人应该避免使用这个属性,除非引用由服务器提供商专为这种目的提供的类。

3. isThreadSafe 属性

isThreadSafe 属性控制由 JSP 页面生成的 servlet 是允许并行访问(默认),还是同一时间不允许多个请求访问单个 servlet 实例(isThreadSafe="false")。使用 isThreadSafe 属性时,可以采用下面两种形式:

<%@ page isThreadSafe="true" %> <%--Default--%>
<%@page isThreadSafe="false" %>
避免使用 isThreadSafe,采用显式的同步措施取而代之。

4. contentType 和 pageEncoding 属性

contentType 属性设置 Content-Type 响应报头,标明即将发送到客户程序的文档的 MIME 类型。有关MIME 类型的更多信息,参见Java Web 开发 (5) HTTP 响应报头。使用 contentType 属性时,可以采用下面两种形式:

<%@ page contentType="MIME-TYPE" %>
<%@ page contentType="MIME-Type; charset=Character-Set" %>

例如这下面2个作用基木相同

<%@ page contentType="application/vnd.ms-excel" %>
<% responce.setContentType("application/vnd.ms-excel"); %>

两种形式的第一点不同是,response.setContentType 使用明确的 Java 代码(这是一些开发人员力图避免使用的方式),而 page 指令只用到 JSP 语法。第二点不同是,指令被特殊处理,它们不是在出现的位置直接成为 _jspService 代码。这意味着 response.setContentType 能够有条件地调用,而 page 指令不能。条件性地设置内容的类型主要用在同一内容能够以多种不同的形式进行显示的情况下。
不同于常规 servlet (默认的 MIME 类型为 text/plain),JSP 页面的默认 MIME 类型是 text/html (默认字符集为 ISO-8859-1)。因此,如果 JSP 页曲以 Latin 字符集输出 HTML则根本无需使用 contentType,如果希望同时更改内容的类型和字符集,可以使用下面的语句:

<%@ page contentType="someMimeType; charset=someCharacterSet" %>

但是,如果只想更改字符集,使用 pageEncoding 属性更为简单。例如,中文 JSP 页面可以使用下面的语句:

<%@ page pageEncoding="GBK" %>

5. session 属性

session 属性控制页面是否参与 HTTP 会话。使用这个属性时,可以采用下面两种形式:

<%@ page session="true" %> <%--Default--%>
<%@ page session="false" %>

true 值(默认)表示,如果存在已有会话,则预定义变量 session (类型为HttpSession)应该绑定到现有的会话;否则,创建新的会话并将其绑定到 session。false 值表示不自动创建会话,在 JSP 页面转换成 servlet 时,对变量 session 的访问会导致错误。
对于高流量的网站,使用 session="false" 可以节省大量的服务器内存。但要注意,session="false" 并不禁用会话跟踪,它只是阻止 JSP 页面为那些尚不拥有会话的用户创建新的会话。由于会话是针对用户,不是针对贞面,所以,关闭某个页面的会话跟踪没有任何益处,除非有可能在同一客户会话中访问到的相关页面都关闭会话跟踪。

6. errorPage 和 isErrorPage 属性

errorPage 属性用来指定一个 JSP 页面,由该页面来处理当前页面中抛出但未被捕获的任何异常(即类型为 Throwable 的对象)。它的应用方式如下:

<%@ page errorPaqe="Relative URL" %>

指定的错误页面可以通过 exception 变量访问抛出的异常。isErrorPage 属性表示当前页是否可以作为其他 JSP 页面的错误页面。使用 isErrorPage 属性时,可以采用下面两种形式:

<%@ page isErrorPage="true" %>
<%@ page isErrorPage="false" %> <%--Default--%>

7. isELIgnored 属性

isELIgnored 属性控制的是:忽略(true)JSP 2.0 表达式语言(EL),还是进行正常的求值(false)。这是 JSP 2.0 新引入的属性;在只支持 JSP 1.2 及早期版本的服务器中,使用这项属性是不合法的。这个属性的默认值依赖于 Web 应用所使用的 web.xml 的版本。如果 web.xml 指定 servlet 2.3(对应JSP 1.2)或更早版本,默认值为 true(但变更默认值依旧是合法的,JSP 2.0 兼容的服务器中都允许使用这项属性,不管 web.xml 的版本如何)。如果 web.xml 指定 servlet 2.4(对应 JSP 2.0)或之后的版本,那么默认值为false。使用这个属性时,可以采用下面两种形式:

<%@ page isELIgnored="false" %>
<%@ page isELIgnored="true" %>

8. buffer 和 autoFlush 属性

buffer 属性指定 out 变量(类型为 JspWriter )使用的缓冲区的大小。使用这个属性时,可以采用下面两种形式:

<%@ page buffer="sizekb" %>
<%@ page buffer="none" %>

服务器实际使用的缓冲区可能比指定的更大,但不会小于指定的大小。例如,<%@ page buffer="32kb" %> 表示应该对文档的内容进行缓存,除非累积至少为32KB、页面完成或明确地对输出执行清空(例如使用 response. flushBuffer),否则不将文档发送给客户。
默认的缓冲区大小与服务器相关,但至少8KB。如果要将缓冲功能关闭,应该十分小心:这样做要求设置报头或状态代码的 JSP 元素都要出现在文件的顶部,位于任何 HTML 内容之前。另一方面,有时输出内容的每一行都需要较长的生成时间,此时禁用缓冲或使用小缓冲区会更有效率;这样,用户能够在每一行生成之后立即看到它们,而不是等待更长的时间看到成组的行。
autoFlush 属性控制当缓冲区充满之后,是应该自动清空输出缓冲区(默认),还是在缓冲区溢出后抛出一个异常(autoFlush="false")。使用这个属性时,可以采用下面两种形式:

<%@ page autoFlush="true" %> <%--Default--%>
<%@ page autoFlush="false" %>

在 buffer="none" 时,false 值是不合法的。如果客户程序是常规的 Web 浏览器,那么 autoFlush="false" 的使用极为罕见。但是,如果客户程序是定制应用程序,可能希望确保应用程序要么接收到完整的消息,要么根本没有消息。false 值还可以用来捕获产生过多数据的数据库查询,但是,一般说来,将这些逻辑放在数据访问代码中(而非表示代码)要更好一些。

9. language 属性

language 属性的作用是指定页面使用的脚本语言,如下所示:

<%@ page language="java" %>

10. info 属性

info 属性定义一个可以在 servlet 中通过 getServletInfo 方法获取的字符串,使用 info 属性时,采用下面的形式:

<%@ page info="Some Message" %>

例子

<%@page
    language="java"
    import="java.util.*"
    session="true"
    contentType="text/html;charset=utf-8"
    buffer="32kb"
%>
<html>
    <head>
        <title>JSP page 指令</title>
    </head>
    <body>
        <h2>Java学习-034-JavaWeb_003 -- JSP page 指令</h2>
    </body>
</html>

总结

1. page 指令允许通过类的导入、servlet 超类的定制、内容类型的设置、以及诸如此类的事物来控制 servlet 的结构。

2. page 指令可以放在文档中的任何地方。

版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。