JSP 中的指令有两种,一种是编译指令 ( Directive ) ,一种是动作指令 ( Action ) 。
编译指令有三种:page、include、taglib。格式是 <%@Directive attribute="value"%>
1、page
page 是用来指明页面属性和信息的,比如说要导入的包、页面内容类型、语言、Session 的开关等等。page 指令的属性有以下几种:
属性 | 作用 | 示例 | 备注 |
language | 指明当前页面所使用的语言 | language="java" | 默认 java |
extends | 指明继承的父类 | extends=“HttpServletRequest” | |
import | 指明需要导入的包 | import="java.util" | |
buffer | 指明缓冲区大小 | buffer="none" | 默认 8KB,无需调整 |
session | Session 开关 | session="false" | 默认 true |
autoFlush | 自动清除缓存开关 | autoFlush="false" | 默认 true |
isThreadSafe | 线程安全开关 | isThreadSafe="true" | 默认 false,不建议设为true |
info | 任何内容 | info="abcdefg" | |
errorPage | 指明发生错误时指向的页面 | errorPage="error.jsp" | |
isErrorPage | 指明此页面是否为错误页面 | isErrorPage="false" | 默认 false |
contentType | 指明页面内容类型 | contentType="text/html;charset=gb2312" | |
pageEncording | 指明页面编码 | pageEncording="gb2312" |
2、include
include 指令是用来指明引用的页面的地址的,JSP Engine 会在 JSP 程序的转换时期先把 file 属性设定的文件包含进来,然后开始执行转换及编译的工作,得到的是一个 JSP 页面。注意包含于被包含的页面要有共同的页面编码字符集,而且被包含的页面只能和包含页面共用参数。这种包含叫做静态包含。
另一种指令,动作指令的格式是: action attribute="value"/>,常用指令有:
1、include
格式为: ,和静态包含对应,这种包含叫做动态包含,JSP Engine 会在 JSP 程序转换时期分别编译包含和被包含文件,所以在 page 属性值中可以直接传入参数,如: 。不过动态包含和静态包含一样被包含页面可以使用包含页面的参数,即被包含页面的参数集合更大一些。当被包含页面与包含页面具有同名参数时,被包含页面只认定被包含页面的参数。
动态包含还可以使用标签的方式实现参数传递:
1: <jsp:include page="example.jsp">
2: <jsp:param name="value1" value="<%=v1%>"/>
3: <jsp:param name="value2" value="<%=v2%>"/>
4: jsp:include>
上面的代码将 v1 重命名为 value1、v2 重命名为 value2 传入 example.jsp。
表:<%@include file="example.jsp"%>和 的区别:
<%@inlcude file="example.jsp"%> | |
include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行。 | 而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入。 |
只生成一个 class 文件 | 生成多个 class 文件 |
file 不可以带参数 | page 可以带参数 |
被包含页面与包含页面同一个 request 对象 | 被包含页面与包含页面不同的 request 对象,被包含页面的 request 对象可以访问包含页面的参数和自己页面的参数 |
常用 | 不常用 |
2、forward
forward 是用来对页面进行转向的, forward 转向是在服务器内部完成的,浏览器并不知道页面被转向了,所以浏览器的地址栏依然是原来页面的地址。
还有一种转向时用 response.sendRedirect() 方法实现的。关于两种方法的差异,列表如下:
<%response.sendRedirect("example.jsp");%> | |
是不同的 request 对象,但是被转到的页面可以访问之前页面的参数。 | 是不同的 request 对象,被转到的页面不能访问之前页面的参数。 |
语句后面的代码不会被执行 | 语句后面的代码依旧会被执行 |
只可以转到 webapps 内部的页面,是服务器内部的转到 | 可以转到任何页面,但是要服务器与浏览器之间多次连接,耗时 |
地址栏无变化 | 地址栏有变化,变为新的地址 |
可以在 page 属性值里面传入参数 | 可以在 URL 参数里面传入参数 |
/ 代表的是 http://127.0.0.1/directory | / 代表的是 http://127.0.0.1/ |
常用,速度快 | 常用,速度慢 |