JSP教程
JSP高级教程

JSP page指令

JSP page 指令是页面指令,可以定义在整个 JSP 页面范围有效的属性和相关的功能。利用 page 指令,可以指定脚本语言,导入需要的类,指明输出内容的类型,指定处理异常的错误页面,以及指定页面输出缓存的大小,还可以一次设置多个属性。

page 指令的属性如下:

<%@ page
[language="java"]
[contentType="mimeType[ ;charset=CHARSET ]"]
[import="{package.class|package.*},..."]
[info="text"]
[extends="package.class"]
[session="true|false"]
[errorPage="relativeURL"]
[isThreadSafe="true|false"]
[buffer="none|8kb|size kb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[isELIgnored="true|false"]
[page Encoding="CHARSET"]
%>

提示:

语法格式说明中的“[”和“]”符号括起来的内容表示可选项。

可以在一个页面上使用多个 page 指令,其中的属性只能使用一次(import 属性除外)。

JSP page 指令将使用这些属性的默认值来设置 JSP 页面,下面介绍 page 指令的 13 个属性。

1、language 属性:设置当前页面中编写 JSP 脚本所使用的语言,默认值为 java。

例如:

<%@ page language="java" %>

目前只可以使用 Java 语言。

2、contenType 属性:设置发送到客户端文档响应报头的 MIME(Multipurpose Internet MailExtention)类型和字符编码,多个值之间用“;”分开。contenType 的用法如下:

<%@ page contenType="MIME 类型; charset=字符编码" %>

MIME 类型被设置为 text/html,如果该属性设置不正确,如设置为 text/css,则客户端浏览器显示 HTML 样式时,不能对 HTML 标识进行解释,而直接显示 HTML 代码。

在 JSP 页面中,默认情况下设置的字符编码为 ISO-8859-1,即 contentType="text/html;charset=ISO-8859-1"。但一般情况下,应该将该属性设置为

contentType="text/html;charset=utf-8"

此处设置 MIME 类型为 text/html,网页所用字符集为 utf-8。

3、import 属性:用来导入程序中要用到的包或类,可以有多个值,无论是 Java 核心包中自带的类还是用户自行编写的类,都要在 import 中引入。import 属性的用法如下:

<%@ page import="包名.类名" %>

如果想要导入包里的全部类,可以这样使用:

<%@ page import="包名.*" %>

在 JSP page 指令中,可多次使用该属性来导入多个类。例如:

<%@ page import="包名.类1" %> <%@ page import="包名.类2" %>

或者通过逗号间隔来导入多个类:

<%@ page import="包名.类1,包名.类2" %>

在 JSP 中,已经默认导入了以下包:

java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*

所以,即使没有用 import 属性进行导入,在 JSP 页面中也可以调用上述包中的类。

【例1】显示欢迎信息和用户登录的日期时间。

本例通过导入 java.util.Date 类来显示当前的日期时间。具体步骤如下。

① 使用 page 指令的 import 属性将 java.util.Date 类导入,然后向用户显示欢迎信息,并把当前日期时间显示出来。具体代码如下:

<%@ page import="java.util.Date" language="java" contentType="text/html;charset=utf-8"%>
<html>
<body>
您好,欢迎光临乐学网Java学院!<br/>
您登录的时间是<%=new Date()  %>
</body>
</html>

② 运行该页面,结果如图 1 所示。

图1 显示欢迎信息和用户登录的日期时间

4、info 属性:设置 JSP 页面的相关信息,如当前页面的作者、编写时间等。此值可设置为任意字符串,由 Servlet.getServletInfo() 方法来获取所设置的值。

【例2】设置并显示 JSP 页面的作者等相关信息。

本例通过 page 指令的 info 属性来设置页面的相关信息,通过 Servlet.getServletInfo() 方法来获取所设置的值,具体步骤如下。

① 使用 page 指令的 info 属性设置页面的作者、版本以及编写时间等。具体代码如下:

<%@ page import="java.util.Date" language="java" contentType="text/html;charset=utf-8"%>
<%@ page info="作者:www.sxbdqn.cn <br/> 版本: v1.0 <br/> 编写时间:2018年11月21 星期三 <br/> 敬请关注, 谢谢!"%>
<html>
<body>
<%
String str=this.getServletInfo();
out.print (str) ;
%>
</body>
<html>

② 运行该页面,结果如图 2 所示。

图2 设置并显示JSP页面的作者相关信息

5、extends 属性:指定将 JSP 页面转换为 Servlet 后继承的类。在 JSP 中,通常不会设置该属性,JSP 容器会提供继承的父类。并且,如果设置了该属性,一些改动会影响 JSP 的编译能力。

6、session 属性:表示当前页面是否支持 session,如果为 false,则在 JSP 页面中不能使用 session 对象以及 scope=session 的 JavaBean 或 EJB。该属性的默认值为 true。

7、errorPage 属性:用于指定JSP文件的相对路径,在页面出错时,将转到这个 JSP 文件来进行处理。与此相适应,需要将这个 JSP 文件的 isErrorPage 属性设为 true。

设置 errorPage 属性后,JSP 网页中的异常仍然会产生,只不过此时捕捉到的异常将不由当前网页进行处理,而是由 errorPage 属性所指定的网页进行处理。如果该属性值设置为以“/”开头的路径,则错误处理页面在当前应用程序的根目录下;否则在当前页面所在的目录下。

8、isErrorPage 属性:指示一个页面是否为错误处理页面。设置为 true 时,在这个 JSP 页面中的内置对象 exception 将被定义,其值将被设定为调用此页面的 JSP 页面的错误对象,以处理该页面所产生的错误。

isErrorPage 属性的默认值为 false,此时不能使用内置对象 exception 来处理异常,否则将产生编译错误。

例如,在发生异常的页面上有如下用法:

<%@ page errorPage="error.jsp" %>

用上面的代码,就可以指明当该 JSP 页面出现异常时,跳转到 error.jsp 去处理异常。而在 error.jsp 中,需要使用下面的语句来说明可以进行错误处理:

<%@ page isErrorPage="true" %>

【例3】页面出现异常的处理。

本例通过 page 指令的 errorPage 和 isErrorPage 两个属性来演示当页面出现异常时应如何处理。具体步骤如下。

① 创建 2-18.jsp 页面,使用 page 指令的 errorPage 属性指定页面出现异常时所转向的页面。具体代码如下:

<%@ page contentType="text/html; charset=utf-8" errorPage="2-18error.jsp" %>
<html>
<body>
<%
//此页面如果发生异常,将向2-18error.jsp抛出异常,并令其进行处理
int x1=5;
int x2=0;
int x3=x1/x2;
out .print (x3);
%>
</body>
</html>

该程序执行的是除法运算,如果除数为 0,将会拋出一个数学运算异常,从 errorPage="2-18error.jsp" 可以看出,程序指定 2-18error.jsp 为其处理异常。

② 创建 2-18error.jsp 页面,使用 page 指令的 isErrorPage 属性指定为出错页面,此页面可以使用 exception 异常对象处理错误信息。具体代码如下:

<%@ page contentType="text/html; charset=utf-8" isErrorPage="true" %>
<html>
<body>
出现错误,错误如下:<br/>
<hr>
<%=exception.getMessage() %>
</body>
</html>

③ 运行 2-18.jsp 页面,结果如图 3 所示。

图3 页面出现异常处理

提示:

为了确译当页面出错时跳转到 errorPage 所指的页面,需要打开 IE 浏览器,选择“工具”→“Internet 选项”菜单命令,在弹出的对话框中选择“高级”选项卡,取消选中“显示友好 HTTP 错误信息”复选框。

9、 buffer 属性:内置输出流对象 out 负责将服务器的某些信息或运行结果发送到客户端显示,buffer 属性用来指定 out 缓冲区的大小。其值可以是 none、8KB 或是给定的 KB 值。

值为 none 表示没有缓存,直接输出至客户端的浏览器中;如果将该属性指定为数值,则输出缓冲区的大小不应小于该值,默认为 8KB(因不同的服务器而不同,但大多数情况下都为 8KB)。

10、 autoFlush 属性:当缓冲区满时,设置是否自动刷新缓冲区。默认值为 true,表示当缓冲区满时,自动将其中的内容输出到客户端;如果设为 false,则当缓冲区满时会出现 JSP Buffer overflow 溢出异常。

提示:

当 buffer 属性的值设置为 none 时,autoFush 属性的值不能设置为 false。

11、isThreadSafe 属性:设置 JSP 页面是否可以多线程访问。默认值为 true,表示当前 JSP 页面被转换为 Servlet 后,会以多线程的方式处理来自多个用户的请求;如果设置为 false,则转换后的 Servlet 会实现 SingleThreadMode 接口,并且将以单线程的方式来处理用户请求。

12、pageEncoding 属性:设置 JSP 页面字符的编码,常见的编码类型有 ISO-8859-1、gb2312、utf-8 和 GBK 等。默认值为 ISO-8859-1。其用法如下:

<%@ page pageEncoding="字符编码" %>

例如:

<%@ page pageEncoding="utf-8" %>

这表示网页使用了 utf-8 编码,与 contentType 属性中的字符编码设置作用相同。

13、isELIgnored 属性:其值可设置为 true 或 false,表示是否在此 JSP 网页中执行或忽略表达式语言 ${}。设置为 true 时,JSP 容器将忽略表达式语言。