JSP-编译指令page、include、taglib

编译指令

    JSP 的编译指令是通知 JSP 引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。

    常见的编译指令有三个。
        page: 该指令是针对当前页面的指令。
        include: 用于指定如何包含另一个页面。
        tablib: 用于定义和访问自定义标签。

    编译指令的格式如下:
        <%@ 编译指令名 属性名="属性值"…%>

1 page 指令

page指令通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令。

page指令属性:
language:声明当前JSP页面使用的脚本语言的种类。目前该属性的值只能为java,默认值也为java,所以通常无须设置。
import
:用来导入包。默认导入的包有:java.lang.*, javax.servlet.*, javax.servlet.http.*, javax,.servlet.jsp.*.
contentType:告知客户端,服务器对此次请求响应的正文格式(MIME类型)和编码字符集。默认为contentType="text/html;charset=UTF-8ISO-8859-1"。如设置为:contentType="text/html;charset=UTF-8",就是告诉客户端,服务器响应的正文文件格式为text/html,这样客户端就会用默认的浏览器方式打开文件,而不用别的应用程序charset=UTF-8告知客户端浏览器,服务器返回的文件编码格式为UTF-8,浏览器将按照UTF-8格式进行解码并且以UTF-8字符集进行页面显示。contentType的作用本质上相当于模拟了一个Http协议的消息头。contentType虽然写在JSP文件中,但是因为JSP文件其实并不能直接响应客户端请求,它必须编译成对应的Servlet以后才能响应请求。所以本质上这个contentType是针对Servlet的设置,即Servlet告诉客户端,我返回的文件(以流的形式,response.getWriter())的MIME类型为text/html,文件的编码字符集为UTF-8。
pageEncoding:设定JSP源文件保存时所使用的编码。因为JSP文件要想响应客户端的请求,它就必须先被编译成一个Servlet,而Servlet是一个Java类,Java类在内存中是以Unicode进行编码的,如果JSP引擎(将JSP翻译成对应的Servlet)不知道JSP的编码格式,就无法进行解码,然后将其转换成内存中的Unicode编码。注意区分contentType的charset和pageEncoding,charset是响应时Servlet(JSP已经编译成了Servlet)告诉客户端浏览器”我“是以这种字符编码的,”你“也要以这种字符解码并显示,整个过程涉及服务器和客户端两方面,而pageEncoding是服务器端JSP文件告诉JSP引擎要以何种编码进行解码,即此时JSP还没被编译成Servlet,它是被编译成Servlet的前提准备工作,整个过程都发生在服务器端,与客户端无关。
session:设定这个JSP页面是否支持session机制,默认为true,所以一般不需要设置,保持默认值即可。
errorPage:指定错误处理页面的地址。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,此时就会自动调用该属性所指向的JSP页面。
isErrorPage:和errorPage属性配合使用。设置本JSP页面是否为错误处理页面。
info:设置该JSP程序(不要忘记本质上是个Servlet)的信息,也可以看做其说明。可以通过Servlet.getServletInfo()方法获取该值。在JSP页面中,可以直接调用getServletInfo()方法获取该值如:<%=getServletInfo()%>.因为JSP是Servlet,而任何一个Servlet都实现了Servlet接口,Servlet接口中含有getServletInfo()方法。
extends
:指定JSP编译生成的Servlet所继承的父类或所实现的接口,一般很少用。
buffer
:指定输出缓冲区的大小。JSP的隐含对象out(JSP有九大隐含对象或者说内置对象)用于缓存JSP(其实是Servlet)对客户端浏览器的输出,默认值为8KB,可以设置为none,也可以设置为其他的值,单位为KB。
autoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true时可以正常输出,设置为false时,则会在buffer溢出时产生一个异常。默认为true。

 最常用的是import,contentType,pageEncoding,最常见的最简单的JSP模版为:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

isELIgnored:如果设定为真,那么JSP中的表达式被当成字符串处理。比如下面这个表达式<p>${2000/20}</p>在isELIgnored="true"时输出为${2000/20},而isELIgnored="false"时输出为100.0。默认为false。

isThreadSafe:用来指定该JSP文件是否支持多线程使用。如果设置为true,则表示该JSP文件支持多线程的使用,也就是表示该JSP文件能够同时处理多个用户的请求;如果设置为false,则表示该JSP文件不支持多线程的使用,也就是表示该JSP文件只能一次处理一个用户的请求。isThreadSafe属性的默认值为true

trimDirectiveWhitespaces:可以使jsp输出的html时去除多余的空行(jsp上使用EL和tag会产生大量的空格和空行)。

deferredSyntaxAllowedAsLiteral:该属性指示在JSP页面的模板文本中是否允许出现字符序列#{。如果该属性的值为false(默认值),当模板文本中出现字符序列#{时,将引发页面转换错误。
    该属性是在JSP 2.1规范中引入的,字符序列#{被保留给表达式语言使用,你不能在模板本中使用字符序列#{。如果在模板文本中需要出现字符序列#{,那么可以将该属性设置为true。

2 include指令

 include指令用于在JSP页面中静态包含一个文件,该文件可以是JSP页面、HTML网页、文本文件或一段Java代码。使用了include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。
include指令的语法如下:
<%@ include file="relativeURLspec" %>

3 taglib指令

taglib指令允许页面使用用户定制的标签。
taglib指令的语法如下:
<%@ taglib (uri="tagLibraryURI" | tagdir="tagDir") prefix="tagPrefix" %>

taglib指令有三个属性:
uri:该属性唯一地标识和前缀(prefix)相关的标签库描述符,可以是绝对或者相对的URI。这个URI被用于定位标签库描述符的位置。
tagdir:该属性指示前缀(prefix)将被用于标识安装在/WEB-INF/tags/目录或其子目录下的标签文件。一个隐含的标签库描述符被使用。
    下面三种情况将发生转换(translation)错误:
        属性的值不是以/WEB-INF/tags/开始。
        属性的值没有指向一个已经存在的目录。
        该属性与uri属性一起使用。
prefix:定义一个prefix:tagname形式的字符串前缀,用于区分多个自定义标签。以jsp:,jspx:,java:,javax:,servlet:,sun:和sunw:开始的前缀被保留。前缀的命名必须遵循XML名称空间的命名约定。在JSP 2.0规范中,空前缀是非法的。

猜你喜欢

转载自xujava.iteye.com/blog/2028722