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内置对象时还会有更进一步的解释。