3.4.1 page指令

3.4.1 page指令

可以使用page指令来控制JSP转换器转换当前JSP页面的某些方面。例如,可以告诉JSP用于转换隐式对象out的缓冲器的大小、内容类型,以及需要导入的Java类型,等等。

page指令语法格式

page指令的语法如下:

1
<%@ page attribute1="value1" attribute2="value2" ... %>

@page间的空格不是必须的,attribute1attribute2等是page指令的属性。

page指令属性列表

如下是page指令属性的列表:

  • import:定义一个或多个本页面中将被导入和使用的java类型。例如:import="java.util.List"将导入List接口。可以使用通配符“*”来引入整个包,类似import="java.util.*"。可以通过在两个类型间加入“,”分隔符来导入多个类型,如import="java.util.ArrayList、java.util.Calendar、java.io.PrintWriter"。此外,JSP默认导入如下包:java.langjavax.servletjavax.servlet.httpjavax.servlet.jsp
  • session:如果session属性值为True,则在本页面之中加入会话管理;如果值为False则不加入会话管理。默认值为True,访问该页面时,若当前不存在javax.servlet.http.HttpSession实例,则容器会创建一个。
  • buffer:以KB为单位,定义隐式对象out的缓冲大小。必须以KB后缀结尾。默认大小为8KB或更大(取决于JSP容器)。该值可以为none,这意味着没有缓冲,所有数据将直接写入PrintWriter
  • autoFlush:默认值为True。若值为True,则当输出缓冲满时会自写入输出流。而值为False,则仅当调用隐式对象的flush方法时,才会写入输出流。因此,若缓冲溢出,则会抛出异常。
  • isThreadSafe:定义该页面的线程安全级别。不推荐使用该参数,因为使用该参数后,会生成一些Servlet容器已过期的代码。
  • info:返回容器生成的Servlet类的getServletInfo方法的结果。
  • errorPage:定义当出错时用来处理错误的页面。
  • isErrorPage:标识本页是一个错误处理页面。
  • contentType:**定义本页面隐式对象response的内容类型,默认是text/html**。
  • pageEncoding:**定义本页面的字符编码,默认是ISO-8859-1**。
  • isELIgnored:配置是否忽略EL表达式。ELExpression Language的缩写。
  • language:**定义本页面的脚本语言类型,默认是Java**,这在JSP 2.2中是唯一的合法值。
  • extends:定义JSP的实现类要继承的父类。这个属性的使用场景非常罕见,仅在非常特殊情况下使用
  • deferredSyntaxAllowedAsLiteral:定义是否解析字符串中出现{#这个符号,默认是False{#是一个表达式语言的起始符号。(这个地方可能有错,后面再验证.)
  • trimDirectiveWhitespaces:定义是否不输出多余的空格/空行,默认是False

page指令可以出现的位置

大部分page指令可以出现在页面的任何位置,但page指令包含contentTypepageEncoding属性时,其必须出现在Java代码发送任何内容之前。这是因为内容类型和字符编码必须在发送任何内容前设定。

page指令import属性

page指令也可以出现多次,但出现多次的指令属性必须具有相同的值。不过,import属性例外,多个包含import属性的page指令的结果是累加的。例如,以下page指令将同时导入java.util.ArrayListjava.util.Date类型:

1
2
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Date"%>

这和如下的写法,效果是一样的:

1
<%@page import="java.util.ArrayList, java.util.Date"%>

page指令可以同时设置多个属性

一个page指令可以同时有多个属性。下面的代码设定了session属性和buffer属性:

1
<%@page session="false" buffer="16kb"%>