指令标识用于设置整个JSP页面范围内都有效的相关信息。它是被服务器解释执行,不会产生任何内容输出到网页中,即指令标识对于客户端浏览器是不可见的。
page指令用于设定整个JSP页面的相关属性。page指令一共有15个属性,这些属性在被服务器解析成Servlet时会转换为相应的Java程序代码。
page指令的属性 page指令的属性名说明language设置当前页面使用的语言,目前只支持Java语言。extends设置当前页面继承的Java类,但并不常用,且有可能影响服务器性能。import设置当前页面要导入的Java类包,即当前页面中Java代码在调用API时需要导入哪些相应的类包。pageEncoding定义当前页面中所有代码的编码格式。默认ISO-8859-1不支持中文,而MyEclipse默认支持GB18030,但不支持GBK。contentType设置当前页面的MIME类型和字符编码,浏览器会据此显示网页内容。默认是ISO-8859-1,不支持中文。session指定当前页面是否使用HTTP的session对象。默认是true,表示当前页面可以使用session对象。buffer设置当前页面out对象使用的缓冲区大小,单位必须是kb。默认是8kb,建议取值为8的倍数如16、32等。autoFlush设置当前页面缓存满时,是否自动刷新缓存。默认是true,如果设置成false,则缓存被填满时将抛出异常。isErrorPage将当前页面设置成错误处理页面,用来处理另一个JSP页面的错误,默认是false。errorPage设置用于处理当前页面异常错误的另一个JSP页面,指定的用作错误处理的JSP页面必须设置isErrorPage属性为true。 page指令的使用示例 <%@ page language="java" pageEncoding="GB18030" contentType="text/html; charset=UTF-8" buffer="128kb" errorPage="error/loginErrorPage.jsp" %> <%@ page import="java.utile.*" %> <%@ page import="java.sql.*" %>include指令用于向当前JSP页面中包含其它文件,如另一个JSP页面、记事本文件等。若当前页面中有include指令时,程序会先将被包含文件中所有内容(包括JSP代码)原样包含到当前页面的include指令位置后生成一个新的文件,然后才对这个新生成的文件进行编译执行后输出给客户端浏览器。即当前页面和被包含文件是作为同一个文件被编译执行,所以在被包含文件中不能使用与当前页面中相同的变量名。 为了使整个页面的层次结构不发生冲突,可以将被包含文件中的<html>、<body>等标记删除掉,因为在当前页面中已经指定这些标记。 备注:指令标识include是静态包含,动作标识<jsp:include>是动态包含。
include指令的属性include指令只有一个file属性,用于指定要包含文件的路径。路径可以是相对路径或绝对路径,但不能是通过<%= %>表达式所代表的文件。
include指令的使用示例 <%@ include file="top.jsp" %>通过taglib指令声明该JSP页面中引用的标签库(如JSTL),并指定标签的前缀。在引用标签库后,可以通过前缀来使用标签库中的标签。
taglib指令的属性 taglib指令的属性名说明prefix指定标签的前缀,前缀不能命名为jsp、jspx、java、javax、sun、servlet、sunw等。uri指定标签库文件的存放位置。 taglib指令的使用示例 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><jsp:include>动作用于向当前页面中包含其它文件,如另一个JSP页面、记事本文件等。当程序在当前页面中执行到<jsp:include>动作时,程序会将请求转发到被包含的文件。编译器编译并执行被包含文件,将结果输出给客户端浏览器,然后返回到当前页面继续执行<jsp:include>动作之后的代码。即当前页面和被包含文件是作为两个不同的文件被编译执行,所以在被包含文件中可以使用与当前页面中相同的变量名。 为了使整个页面的层次结构不发生冲突,可以将被包含文件中的<html>、<body>等标记删除掉,因为在当前页面中已经指定这些标记。 备注:指令标识include是静态包含,动作标识<jsp:include>是动态包含。
include动作的属性 include动作的属性名说明page指定被包含文件的相对路径。flush可选属性,设置是否刷新缓冲区。默认为false,如果设置成true,则先刷新缓冲区再执行包含工作。 include动作的使用示例 <jsp:include page="top.jsp" flush='true' /><jsp:forward>动作用于将请求转发到其他的Web资源,例如另一个JSP页面、HTML页面、Servlet等。执行请求转发后,当前页面<jsp:forward>标记后的代码将不再被执行。
forward动作的属性<jsp:forward>动作只有一个page属性,用于指定请求转发的目标页面。该属性可以是一个指定文件路径的字符串,也可以是表示文件路径的JSP表达式。但是目标页面必须是服务器内部资源,即当前应用中的资源。
forward动作的使用示例 <jsp:forward page="modify.jsp" /><jsp:param>动作可以作为<jsp:forward>动作的子标识,用于给<jsp:forward>动作传递参数。<jsp:param>动作传递的参数,将以“参数名=值”的形式加入到请求中。它的功能与再请求url后面加“?参数名=参数值”是相同的。
param动作的属性 param动作的属性名说明name指定参数的名字value设置对应的参数值 param动作的使用示例 <jsp:forward page="modify.jsp"> <jsp:param name="userId" value="7" /> </jsp:forward>JSP表达式脚本标识<%= Java表达式 %>用于向当前页面中输出信息。其中,表达式可以是任何Java语言的完整表达式,该表达式的最终运算结果将被转换为字符串输出给客户端浏览器。 JSP表达式脚本标识不仅可以插入网页的文本中,用于输出文本内容,也可以插入HTML标记中,用于动态设置属性值。
表达式脚本标识的使用示例 <%= 'Hello World!' %> <%= 5+6 %>JSP声明脚本标识<%= Java声明变量或方法的代码 %>用于在JSP页面中定义全局变量或方法。通过声明脚本标识定义的变量或方法可以被整个JSP页面访问,所以通常使用它来定义整个JSP页面都需要引用的变量或方法。服务器执行时,会将JSP页面转换为Servlet类,在该类中会把使用声明脚本标识定义的变量和方法转换为类的成员变量和方法。 声明脚本标识与代码片段脚本标识的区别是:通过声明脚本标识创建的变量和方法,其生命周期是从创建开始到服务器关闭结束;而代码片段脚本标识创建的变量或方法,其生命周期是到页面关闭后就会被销毁。
声明脚本标识的使用示例 <%! int number = 0; //声明全局变量 int count() { //声明全局方法 number++; return number; } %>通过上面的代码声明全局变量和全局方法后,在后面如果通过<%= count() %>调用全局方法,则每次刷新页面,都会输出前一次值+1的值。
通过代码片段脚本标识<% Java代码或脚本代码 %>在JSP页面中嵌入Java代码或脚本代码。代码片段将在页面请求的处理期间被执行,通过Java代码可以定义变量或流程控制语句等;通过脚本代码可以应用JSP的内置对象在页面输出内容、处理请求和响应、访问session会话等。 代码片段脚本标识与声明脚本标识的区别是:通过声明脚本标识创建的变量和方法,其生命周期是从创建开始到服务器关闭结束;而代码片段脚本标识创建的变量或方法,其生命周期是到页面关闭后就会被销毁。
代码片段脚本标识的使用示例 <% String str = ""; //声明保存九九乘法表的字符串变量 for(int i = 1; i <=9; i++) { for(int j = 1; j <= i; j++) { str += j + "*" + i + "=" + j*i; str += " "; } str += "<br>"; } %>单行注释//注释内容可以用到HTML中,也可以用到JSP脚本标识中。
嵌入HTML中单行注释的使用示例 //显示数据报表的表格 <table> <tr> <td>用户数</td> <td><%= userNumber %></td> </tr> </table>通过在JSP页面中添加的HTML注释,虽然在浏览器中不显示,但是可以通过查看源代码看到这些注释信息,所以严格来说这种注释是不安全的。但是隐藏注释<%-- 注释内容 --%>不仅在浏览器中看不到,而且在查看HTML源代码时也看不到,所以其安全性更高。
嵌入HTML中隐藏注释的使用示例 <%-- 显示数据报表的表 --%> <table> <tr> <td>用户数</td> <td><%= userNumber %></td> </tr> </table>由于HTML注释对JSP嵌入的代码不起作用,因此可以利用它们的组合即动态注释<!-- Java表达式脚本 -->,构成动态的HTML注释文本。
嵌入HTML中动态注释的使用示例 <!-- <%= new Date() %> -->单行注释//注释内容可以用到HTML中,也可以用到JSP脚本标识中。
嵌入Java代码或脚本代码中单行注释的使用示例 <% String userName = ""; //定义一个保存用户名的变量,它的初始值是空字符串。 %>多行注释的开始标记/*和结束标记*/可以不在同一个脚本程序中同时出现。
嵌入Java代码或脚本代码中多行注释的使用示例 <% /* *定义一个保存用户名的变量 *它的初始值是空字符串 */ String userName = ""; %>提示文档注释会被Javadoc文档工具生产文档时读取,文档是对代码结构和功能的描述。
嵌入Java代码或脚本代码中提示文档注释的使用示例 <% /** **add方法的功能描述 **参数a的说明 **参数b的说明 */ int add(int a, int b) { return a + b; } %>在之后使用add方法时,将鼠标移动到add方法上时,将显示add方法的功能描述、参数a的说明、参数b的说明等提示信息。
