Java Server Pages(JSP)——3. JSP page指令与include指令

写在前面

这一部分学习一下JSP指令相关知识。指令是JSP语法元素的第一种类型。 它们指示JSP转换器如何翻译JSP页面为Servlet。 JSP 2.2定义了多个指令, 但只有page和include最重要,后面如有涉及会了解taglib、 tag、 attribute以及variable。

Page指令

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

page指令的语法如下所示:

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

@和page间的空格不是必须的, attribute1、attribute2等是page指令的属性。 page指令属性如下所示:

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

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

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

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

等效代码如下所示:

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

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

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

错误页面

可以使用page指令的isErrorPage属性(属性值必须为True)来标识一个JSP页面是错误页面。错误页面是通过JSP制定的一个特殊页面,当当前应用页面遇到未捕获的异常时(JSP也可以使用try{}catch{}捕获异常并处理)用户将看到一个精心设计的网页解释发生了什么, 而不是一个用户无法理解的错误信息。

如下展示了一个errorHandler.jsp页面

<%@page isErrorPage="true"%>
<html>
	<head><title>Error</title></head>
	<body>
		An error has occurred. <br/>
		Error message:
		<%
			out.println(exception.toString());
		%>
	</body>
</html>

include指令

可以使用include指令将其他文件中的内容包含到当前JSP页面。 一个页面中可以有多个include指令。 若存在一个内容会在多个不同页面中使用或一个页面不同位置使用的场景, 则将该内容模块化到一个include文件非常有用。

include指令的语法如下:

<%@ include file="url"%>

其中, @和include间的空格不是必须的, URL为被包含文件的相对路径, 若URL以一个斜杠(/) 开始,则该URL为文件在服务器上的绝对路径, 否则为当前JSP页面的相对路径。JSP转换器处理include指令时, 将include指令替换为指令所包含文件的全部内容。相当于指令所包含文件内容嵌套在incllude指令处。

注意, include指令也可以包含静态HTML文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值