JSP指令是从JSP向Web容器发送的消息,它用来设置页面的全局属性,如输出内容类型等。
注意:指令的作用范围仅限于包含指令本身的JSP页面。
语法格式:
<%@ 指令名 属性1=”值1” 属性2=”值2” ...%>
JSP中包括三种指令:
- page指令
- taglib指令
- include指令
page指令定义JSP页面相关的属性。语法格式如下:
<%@ page 属性1=”值1” 属性2=”值2” ... %>
page指令是位置无关的,但由于属性pageEncoding和contentType决定页面的字符编码,因此必须在页面的开始设置。
page指令的属性:language、extends、import、session、buffer、autoFlush、isThreadSafe、info、errorPage、isErrorPage、contentType、pageEncoding和isELIgnored等。
page指令:定义与页面相关的属性,JSP2.0定义了13种属性
- import:定义将在生成的servlet类中添加的Java import语句。缺省情况下自动加入:java.lang, javax.servlet, javax.servlet.http, javax.servlet.jsp
- isThreadSafe:定义生成的servlet是否实现SingleThreadModel。缺省值为“true”,表示web应用是线程安全的,不需要实现SingleThreadModel。若值为“false”,表示生成的servlet实现SingleThreadModel
- contentType:定义JSP响应的MIME类型
- isELIgnored:定义当JSP页面翻译的时候,是否EL表达式被忽略
- isErrorPage:定义当前的页面是否为另一个JSP页面的错误页面。缺省值为“false”。如果值为“true”,页面可以访问隐含的exception对象;否则不能访问
- errorPage:定义一个URL资源,未捕获的异常将发送到该资源。如果该资源为JSP页面,则该页面有一个isErrorPage=“true”的page指令
- language:”定义在脚本、表达式和声明中使用的脚本语言,现在其值只能为“java”
- extends:定义本JSP页面将被容器编译成的servlet类的超类
- session:定义该JSP页面是否有一个隐含的session对象,缺省为“true”
- buffer:定义隐含的out对象如何处理缓冲,参考JspWriter
- autoFlush:定义缓冲了的输出是否自动提交(flush),缺省值为“true”
- info:定义一个字符串,它可以放进转换后的JSP页面,并可以通过servlet的getServletInfo()方法获得
- pageEncoding:定义JSP页面的字符编码。缺省值为:“ISO-8859-1”
对于page指令,需要说明的是:
- <%@ page %>指令作用于整个JSP页面,同样包括静态的包含文件。但是<%@ page %>指令不能作用于动态的包含文件,比如 <jsp:include>。
- 可以在一个页面中引用多个<%@ page %>指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入的是Java语言中的类),所以此属性就能多用几次。
- 无论把<%@ page %>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,及好的编程习惯,最好还是把它放在JSP文件的顶部。
include可以包含任意的文件,当然,只是把文件的内容包含进来。
include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。所以include指令引入通常也称之为静态引入。
语法:<%@ include file="relativeURL"%>,其中的file属性用于指定被引入文件的路径。路径以“/”开头,表示代表当前web应用。
include指令细节注意问题:
- 被引入的文件必须遵循JSP语法。
- 被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见名知意,JSP规范建议使用.jspf(JSP fragments(片段))作为静态引入文件的扩展名。
- 由于使用include指令将会涉及到2个JSP页面,并会把2个JSP翻译成一个servlet,所以这2个JSP页面的指令不能冲突(除了pageEncoding和导包除外)。