JSP指令是从JSPWeb容器发送的消息,它用来设置页面的全局属性,如输出内容类型等。

注意:指令的作用范围仅限于包含指令本身的JSP页面。

语法格式:

<%@ 指令名 属性1=”1” 属性2=”2” ...%>

JSP中包括三种指令:

  1. page指令
  2. taglib指令
  3. include指令

page指令定义JSP页面相关的属性。语法格式如下:

       <%@ page 属性1=1 属性2=2 ... %>

       page指令是位置无关的,但由于属性pageEncodingcontentType决定页面的字符编码,因此必须在页面的开始设置

page指令的属性:languageextendsimportsessionbufferautoFlushisThreadSafeinfoerrorPageisErrorPagecontentTypepageEncodingisELIgnored等。

page指令:定义与页面相关的属性,JSP2.0定义了13种属性

  1. import:定义将在生成的servlet类中添加的Java import语句。缺省情况下自动加入:java.lang, javax.servlet, javax.servlet.http, javax.servlet.jsp
  2. isThreadSafe:定义生成的servlet是否实现SingleThreadModel。缺省值为“true”,表示web应用是线程安全的,不需要实现SingleThreadModel。若值为“false”,表示生成的servlet实现SingleThreadModel
  3. contentType:定义JSP响应的MIME类型
  4. isELIgnored:定义当JSP页面翻译的时候,是否EL表达式被忽略
  5. isErrorPage:定义当前的页面是否为另一个JSP页面的错误页面。缺省值为“false”。如果值为“true”,页面可以访问隐含的exception对象;否则不能访问
  6. errorPage:定义一个URL资源,未捕获的异常将发送到该资源。如果该资源为JSP页面,则该页面有一个isErrorPage=“true”page指令
  7. language:”定义在脚本、表达式和声明中使用的脚本语言,现在其值只能为“java”
  8. extends:定义本JSP页面将被容器编译成的servlet类的超类
  9. session:定义该JSP页面是否有一个隐含的session对象,缺省为“true”
  10. buffer:定义隐含的out对象如何处理缓冲,参考JspWriter
  11. autoFlush:定义缓冲了的输出是否自动提交(flush),缺省值为“true”
  12. info:定义一个字符串,它可以放进转换后的JSP页面,并可以通过servletgetServletInfo()方法获得
  13. pageEncoding:定义JSP页面的字符编码。缺省值为:“ISO-8859-1”

 

对于page指令,需要说明的是:

  1. <%@ page %>指令作用于整个JSP页面,同样包括静态的包含文件。但是<%@ page %>指令不能作用于动态的包含文件,比如 <jsp:include>
  2. 可以在一个页面中引用多个<%@ page %>指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Languageimport语句引入的是Java语言中的类),所以此属性就能多用几次。
  3. 无论把<%@ page %>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,及好的编程习惯,最好还是把它放在JSP文件的顶部。

 

include可以包含任意的文件,当然,只是把文件的内容包含进来。

  include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。

语法:<%@ include file="relativeURL"%>,其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。

include指令细节注意问题:

  1. 被引入的文件必须遵循JSP语法。
  2. 被引入的文件可以使用任意的扩展名,即使其扩展名是htmlJSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见名知意,JSP规范建议使用.jspfJSP fragments(片段))作为静态引入文件的扩展名。
  3. 由于使用include指令将会涉及到2JSP页面,并会把2JSP翻译成一个servlet,所以这2JSP页面的指令不能冲突(除了pageEncoding和导包除外)。