一、JSP指令简介
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
在JSP 2.0规范中共定义了三个指令:
- page指令
- Include指令
- taglib指令
属性 | 描述 | 默认值 |
---|---|---|
language | 指定JSP页面使用的脚本语言。 | Java |
extends | JSP被翻译成Servlet程序,该属性设置Servlet继承的超类。 | HttpJspBase 类 |
import | 引用外部类文件。 | 无 |
session | 设置session是否有效。 | true (有效) |
buffer | 定义输出流缓冲区大小。 | 8KB |
autoFlush | 设置是否自动刷新输出缓冲区。 | true (自动) |
isThreadSafe | 设置当前JSP页面是否能够同时处理一个以上的用户请求。 | true (可以) |
info | 设置JSP页面的信息。 | 无 |
isELIgnored | 是否忽略EL表达式。 | false (不忽略) |
isErrorPage | 当前JSP页面是否是错误处理页面。 | false (不是) |
errorPage | 设置异常处理页面的URL,即某个 isErrorPage 属性为 true 的页面的URL。 | 无 |
contentType | 设置 MIME 类型和编码方式。 | text/html,IS08859-l |
language属性
language 属性用来指定当前JSP页面所采用的脚本语言。当前JSP版本只能采用Java作为脚本语言。其实该属性可以不设置,因为JSP默认的就是采用Java作为脚本。
language属性的设置方法如下:
<%@ page language="java" %>
extends属性
JSP其实是一个特殊的Servlet,最终会被翻译成Servlet程序。
被翻译成的Servlet一般都继承一个父类,默认是 HttpJspBase 类,可以通过 extends 属性来自定义继承的超类。例如:
<%@ page language="java" extends="com.manongsushe.JSPDemo" %>
翻译后的 Servlet 程序将继承 com.manongsushe 包下的 JSPDemo 类,大家可以在 tomcat 的 work 目录中找到 servlet 的源码。
注意:尽量少使用extend属性来指定超类,这样就会把JSP代码与Java代码进行了绑定。
import属性
import 属性用来引用外部类文件,与Java中的 import 语句功能相同。
import 属性引用的类文件包括:
- 系统环境变量中所指定目录下的类文件;
- Tomcat 容器的 $CATALINA_HOME\lib 目录下的零散类文件或者打包后的Jar文件;
- WEB-INF\classes目录下的类文件以及WEB-INF\lib目录下的jar文件。
注意:使用 import 属性引用类文件必须写全名(即带上包名)。如果需要引用多个类文件,可以用逗号隔开。例如:
<%@ page import="java.util.*, javax.net.*, com.manongsushe.JSPDemo" %>
被翻译成 Servlet 后,会变成标准的Java程序形式:
import java.util.*;
import javax.net.*;
import com.manongsushe.JSPDemo;
session属性
session 属性和上面介绍的属性有所不同:上面介绍的属性是在JSP页面处于编译阶段执行的,而session属性是在容器处于请求阶段执行的。
session 是JSP内置对象(后续将会介绍),session 属性就是用来设置 session 对象是否有效:"true" 表示有效,"false"表示无效。
session 属性默认为 true,一般不设置。
buffer属性
buffer 属性用来设置输出缓冲区的大小,默认为8KB(一般默认即可)。当遇到特殊情况时,才将它设置成8KB以上或者none(表示不使用输出缓冲区)。
autoFlush属性
autoFlush 属性用来设置是否自动刷新输出缓冲区(将缓冲区中的内容输出到页面显示),可以和 buffer 一起使用,默认值为 "true",表示自动刷新。
如果设置为 "false",就需要编写代码手动刷新。
isThreadSafe属性
isThreadSafe 属性表示是否是线程安全的,用来设置当前JSP页面是否能够同时响应超过一个以上的用户请求。
info属性
info 属性非常简单,它并不对JSP页面进行设置,只是定义了一个字符串,作为页面的说明性文本,可以使用servlet.getServletInfo() 获得它所定义的信息。例如:
<%@ page info="JSP演示页面 -- Powered By 码农宿舍" %>
<%
out.println(getServletInfo()); // 输出 info 属性所定义的字符串
%>
isELIgnored属性
EL 是 expression language 的缩写,即表达式语言(后续将会介绍)。isELIgonred 属性用来设置JSP页面中的EL是否可用,"true" 表示忽略,不可用,"false" 表示不忽略,可用。
例如,对于EL表达式 ${2000%20},当 isELIgnored 设置为 true 时,在JSP中会显示字符串 ${2000%20};设置为 false 时,则显示100。
isELIgnored 属性默认值为 false,即EL可用。建议读者使用EL,这样会使得JSP的格式更加一致。
isErrorPage属性
isErrorPage 属性用来设置当前页面是否是用来作为其他页面的错误处理页面。当需要统一处理JSP错误时,就可以使用 isErrorPage 和下面即将介绍的 errorPage 属性,来设置错误处理页面。
isErrorPage 属性的值可以是 "true" 或 "false",默认为 "false"。为 true 时,可以使用隐式的exception内置对象(后续将会介绍)来处理请求异常。
errorPage属性
errorPage 属性一般和 isErrorPage 属性结合使用,errorPage 属性用来设置能够处理异常的页面,它是一个URL,即某个 isErrorPage 属性值为 true 的页面。
例如对 demo.jsp 设置了 errorPage 属性:
<%@ page errorPage="doError.jsp" %>
当 demo.jsp 页面出现异常错误的时候,就会自动跳转到 doError.jsp 页面进行错误处理。
在实际开发中,一般指定少数几个页面统一处理异常,其他页面通过 errorPage 属性来指定处理异常的页面。
contentType属性
contentType 属性用来设置页面的 MIME 类型和编码方式。例如:
<%@ page contentType="text/html; charset=UTF-8" %>
常见的 MIME 类型有 text/plain、text/html(默认)、text/xml、image/gif、image/jpeg,常见的字符集有 UTF-8 和 GBK,一般使用 UTF-8,它支持的字符比 GBK 多很多。