2.4 JSP的3个编译指令 2.4.1 page指令
2.4 JSP的3个编译指令
JSP
的编译指令是通知JSP
引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。
JSP常见编译指令
常见的编译指令有如下三个:
page
:该指令是针对当前页面的指令。include
:用于指定包含另一个页面。taglib
:用于定义和访问自定义标签。
编译指令语法格式
使用编译指令的语法格式如下:
1 | <%@ 编译指令名 属性名="属性值" ... %> |
下面主要介绍page
和include
指令,关于taglib
指令,将在自定义标签库处详细讲解。
2.4.1 page指令
page
指令通常位于JSP
页面的顶端,一个JSP
页面可以使用多条page
指令。
page指令语法格式
page
指令的语法格式如下:
1 | <%@ page |
page指令属性
下面依次介绍page
指令各属性的意义。
page 指令属性 |
描述 |
---|---|
language |
声明当前JSP 页面使用的脚本语言的种类,因为页面是JSP 页面,该属性的值通常都是java ,该属性的默认值也是java ,所以通常无须设置。 |
extends |
指定JSP 页面编译所产生的Java 类所继承的父类,或所实现的接口。 |
import |
用来导入包。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang.* 、javax.servlet.* 、javax.servletjsp.* 、javax.servlet.http.* 。 |
session |
设定这个JSP 页面是否需要HttpSession |
buffer |
指定输出缓冲区的大小。输出缓冲区的JSP 内部对象:out 用于缓存JSP 页面对客户浏览器的输出,默认值为8KB ,可以设置为none ,也可以设置为其他的值,单位为KB 。 |
autoFlush |
当输岀缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true 时为正常输出;如果设置为false ,则会在buffer 溢出时产生一个异常。 |
info |
设置该JSP 程序的信息,也可以看做其说明,可以通过Servlet.getServletInfo(() 方法获取该值。如果在JSP 页面中,可直接调用getServletInfo() 方法获取该值,因为JSP 页面的实质就是Servlet 。 |
errorPage |
指定错误处理页面。如果本页面产生了异常或者错误,而该JSP 页面没有对应的处理代码,则会自动调用该属性所指定的JSP 页面 |
isErrorPage |
设置本JSP 页面是否为错误处理程序。如果该页面本身已是错误处理页面,则通常无须指定errorPage 属性。 |
contentType |
用于设定生成网页的文件格式和编码字符集,即MIME 类型和页面字符集类型,默认的MIME 类型是text/html |
pageEncoding |
指定生成网页的编码字符集。 |
因为JSP
内建了异常机制支持,所以JSP
可以不处理异常,即使是checked
异常
从2.3节中执行数据库操作的JSP
页面中可以看出,在connDb.jsp
页面的头部,使用了两条page
指令:
1 | <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> |
其中第二条指令用于导入本页面中使用的类,如果没有通过page
指令的import
属性导入这些类,则需在脚本中使用全限定类名即必须带包名。可见,此处的**import
属性类似于java
程序中的import
关键字的作用**。
如果删除第二条page
指令,则执行出现错误。
info属性 getServletInfo方法
jspInfo.jsp
看下面的JSP
页面,该页面使用page
指令的info
属性指定了JSP
页面的描述信息,又使用getServletInfo()
方法输出该描述信息。
1 | <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> |
以上页面的第代码:
1 | <%@ page info="this is a jsp"%> |
设置了info
属性,用于指定该JSP
页面的描述信息;代码:
1 | <%= getServletInfo() %> |
使用了getServletInfo()
方法来访问该描述信息。
在浏览器中执行该页面,将看到如图2.8所示的效果
errorPage属性
errorPage
属性的实质是JSP
的异常处理机制,JSP
脚本不要求强制处理异常,即使该异常是checked
异常。
- 如果
JSP
页面在运行中抛出未处理的异常,系统将自动跳转到errorPage
属性指定的页面; - 如果
errorPage
没有指定错误页面,系统则直接把异常信息呈现给客户端浏览器——这是所有的开发者都不愿意见到的场景。
errorTest.jsp
看下面的JSP
页面,该页面设置了page
指令的errorPage
属性,该属性指定了当本页面发生异常时的异常处理页面。
1 | <%@ page contentType="text/html; charset=gbk" language="java" errorPage="error.jsp" %> |
以上页面的代码:
1 | <%@ page ...... errorPage="error.jsp" %> |
指定errorTest.jsp
页面的错误处理页面是error.jsp
。
error.jsp
下面是error.jsp
页面,该页面本身是错误处理页面,因此将isErrorPage
设置成true
1 | <%@ page contentType="text/html; charset=GBK" language="java" isErrorPage="true" %> |
上面页面的代码:
1 | <%@ page ...... isErrorPage="true" %> |
指定error.jsp
页面是一个错误处理页面。在浏览器中浏览errorTest.jsp
页面的效果如图29所示
如果将前一个页面中page
指令的errorPage
属性删除,再次通过浏览器浏览该页面,执行效果如图2.11所示。
可见,使用errorPage
属性控制异常处理的效果在表现形式上要好得多。
关于JSP
异常,本章在介绍exception
内置对象时还会有更进一步的解释。