一、JSP的3个指令
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
指令用来申明JSP页面的一些属性,比如编码方式,文档类型。我们在servlet中也会申明我们使用的编码方式和响应的文档类型的,而JSP就是用指令来申明。上面我们也说到了一条指令,也就是page指令。
JSP指令格式:<%@ directive {attribute=value}* %>(<%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”。。。%>)
分析:
directive:指令名称,例如page指令
attribute=value:紧跟指令名称后面的就是各种属性,以键值对的形式书写
*:代表后面能跟0个或多个属性。
1.1、page指令(用来声明JSP页面的属性等)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> page指令,后面跟着三个属性,分别是language、contentType、pageEncoding。
这只是其中的几个属性,并没有写全,page指令允许的属性如下表所示:
属性名称 取值范围 描述
language java 解释该JSP文件时采用的语言,一般为java语言,默认为java
extends 任何类的全名 编译该JSP文件时继承哪个类,JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init、destroy等方法
import 任何包名、类名 引入该JSP中用到的类、包等,import是唯一可以声明多次的page指令属性,一个import可以引用uogelei,中间用英文逗号隔开,
如<%@ page import="java.util.List,java.util.ArrayList"%>
session true、false 该JSP内是否内置Session对象,如果为true,则内置Session对象,可直接使用,否则反之,默认为true
autoFlush true,false 是否运行缓存,如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存到缓存里,缓存满
了或者程序执行完毕或者执行out.flush()操作时才到客户端,默认为true。
buffer none或者数字KB 指定缓存大小,当autoFlush设为true时有效,例如<%@ page buffer=10kb%>
isThreadSafe true,false 是否线程安全,如果为true,则运行多个线程同时运行该jsp程序,否则只运行一个线程,其余线程等待,默认为false
isErrorPage true,false 指定该页面是否为错误显示页面,如果为true,则该JSP内置有一个Exception对象exception,可直接使用,否则没有,默认为false
errorPage 某个JSP页面的相对路径 指明一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到errorPage指定的页面,errorPage指定的页面通常
isErrorPage属性为true,且内置的exception对象为未捕捉的异常
contentType 有效的文档类型 客户端浏览器根据该属性判断文档类型,例如 HTML格式为text/html、纯文本格式为text/plain、JPG图像为image/jpeg、GIF图像为image/gif、
WORD文档为application/msword,该属性常跟着charset设置编码一起,作用是通知服务器和浏览器都使用同一个码表
info 任意字符串 指明JSP的信息,该信息可以通过Servlet.getServletInfo()方法获取到
trimDirective Whitespaces true、false 是否去掉指令前后的空白字符,默认为false
pageEncoding UTF-8,ISO-8859-1等 指定一张码表来对该JSP页面进行编码
1.2、include指令
比较简单,只有一种形式 <%@ include file="relativeURL"%> relativeURL:本应用程序内另一个JSP文件或者HTML文件的路径,例如,网址内所有页面均有一个统一风格的导航栏和页脚版权,那么就可以使用该指令将其包含进来。
特点:include指令会将包含页面的源代码添加到使用include指令的页面中来,然后编译成class文件,而等下会讲到的一个JSP行为,<jsp:include page="relativeURL">作用跟include指令一样,
但是不同的是,include行为是运行时单独执行包含页面,然后把执行的结果包含到本页面来,属于先运行后包含。
注意:
静态包含:把其它资源包含到当前页面中。
<%@ include file="/include/header.jsp" %>
动态包含:
<jsp:include page="/include/header.jsp"></jsp:include>
两者的区别:翻译的时间段不同
前者:在翻译时就把两个文件合并
后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。
原则:能用静的就不用动的。
1.3、taglib指令
JSP支持标签技术,后面会讲到标签的用法,jstl标签库的使用等,
作用:用来指明JSP页面内使用的JSP标签库,taglib指令有两个属性,uri为类库的地址,prefix为标签的前缀
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>