5.4.5 JSP动作元素
JSP2.0规范中定义了一些标准动作元素,基于某些信息完成特殊的动作,如请求的转发、在当前页中包含其他文件、创建一个JavaBean实例等。动作元素的语法以XML为基础,使用时区分大小写。
JSP2.0规范中,主要有20项动作元素。其中对于JSP初学者较为常用的有jsp:include、jsp:forward、jsp:param、jsp:params、jsp:useBean、jsp:set Property和jsp:getProperty。其中jsp:useBean、jsp:setProperty和jsp:get Property与JavaBean组件相关,读者可以通过扫描本章后的二维码继续学习。下面将重点介绍动作元素jsp:include、jsp:forward、jsp:param和jsp:params。
1.包含文件:jsp:include
jsp:include动作元素用于在请求处理阶段向当前的页面中包含其他的文件。此时并不包含指定页面的实际内容,只包含通过执行页面生成的响应。
该标识的使用格式如下:
jsp:inc lude page=“{relat iveURL|%=expression%}“f lush=“t rue|false“/
或者向被包含的动态页面中传递参数:
jsp:include的属性如表5-4所示。
表5-4 jsp:include的属性及说明
下面给出使用动作元素在mainpage.jsp页面中包含currenttime.jsp的例子。
【例5-12】jsp:include的使用。
运行结果如图5-14所示。
图5-14 jsp:include动作元素使用示例
jsp:include元素包含的文件既可以是动态文件也可以是静态文件。如果被包含的是静态文件,则页面执行后,在使用该元素的位置将会输出这个文件的内容;如果jsp:include元素包含的是一个动态文件,那么JSP编译器将编译并执行这个文件。
前面已经介绍了include指令,include动作元素与include指令之间有如下差异。
①指定被包含页面的属性不同:include指令的file属性不支持任何表达式,而include动作元素的page属性支持JSP表达式。
②处理方式不同:include指令在翻译阶段执行,将被包含的页面内容原封不动地插入当前页面使用该指令的位置,形成一个合成页面,然后JSP编译器对这个最终页面进行编译。include动作元素在请求处理阶段执行,当前页面将请求转发到被包含的页面,并将执行结果输出后,返回当前页面继续执行后面的代码。此时,JSP编译器分别对两个页面进行了编译。
③包含方式不同:include指令是静态包含。被包含的页面发生改变时,整个合成页面会重新被编译,最终服务器执行的是合成后经JSP编译器编译的一个.class文件。include动作元素通常用于包含经常需要改动的页面。被包含页面发生改动不会影响当前文件,服务器只需重新编译被包含页面即可。此时服务器执行的是两个页面。只有在执行jsp:include动作元素时,被包含的页面才会被编译,这是一种动态包含。
④对被包含文件的约定不同:使用include指令包含页面时,对被包含页面有约定,合成的页面需要符合JSP语法规范,如当前页面和包含页面的page指令不应重复设置。而include动作元素不必遵循此约定。
2.请求转发:jsp:forward
jsp:forward动作元素用来将客户端请求的处理转发到另外一个JSP、HTML或相关的资源页面上。通常在使用多个页面处理同一个请求时,需要使用该元素将控制从一个页面传到另一个页面。当该元素被执行后,当前的页面不再被执行,而转去执行该元素指定的目标页面。
该标识的使用格式如下:
jsp:forward page={“relat iveURL“|“%=expression%“}/
如果转发的目标是一个动态文件,还可以向该文件中传递参数,使用格式如下:
jsp:forward的属性包括page属性,指定了目标文件的路径,类似jsp:include的page属性。此外,jsp:param子元素可以用于向目标文件传递参数。
下面给出jsp:forward的使用示例。在forward.jsp页面中,首先获取一个随机数,如果该数大于0.5就转向页面add.jsp,否则转向页面power.jsp。
【例5-13】jsp:forward的使用。
图5-15所示为forward.jsp运行几次后,随机出现的两种运行结果。
图5-15 使用jsp:forward的运行结果
其中图(a)是随机数大于等于0.5时,执行add.jsp页面的结果,图(b)是随机数小于0.5时,执行power.jsp页面的结果。
3.参数传递:jsp:params与jsp:param
在前面的include和forward动作元素中,均出现了jsp:param动作元素,它用来向需要包含的页面或要转向的页面传递参数。jsp:params也同样用于传递参数。不同之处在于:jsp:param经常与jsp:include、jsp:forward等元素一起使用,而jsp:params只和jsp:plugin(见后面介绍)一起使用,向Applet或Bean传递参数。
通过jsp:param传递参数的格式如下:
jsp:param name=“ParameterName“value=“ParameterValue“/
通过jsp:params传递多个参数的格式如下:
其中name属性为参数的名称,value属性是参数值。