3.4 JSP动作元素

JSP动作元素用来控制JSP容器的动作,可以插入文件、重用JavaBean组件、导向另一个页面等,可用的标准动作元素如下:

<jsp:include>在当前页面添加静态和动态的资源。

<jsp:forward>引导请求者进入新的页面。

<jsp:param>提供其他JSP动作的名称/值信息。

<jsp:useBean>应用JavaBean组件。

<jsp:plugin>连接客户端的Applet和Bean插件。

动作元素和指令元素不同,动作元素是在客户端请求时期动态执行的,每次有客户端请求时可能会被执行一次;而指令元素是在编译时被编译执行,它只会被编译一次。

3.4.1 <jsp:include>

<jsp:include>动作允许包含一个静态HTML或动态文件(JSP及其他)内容输出到当前JSP页面中。<jsp:include>有两种形式,最简单的形式是不设置任何参数,其语法形式如下:

<jsp:include page="{relativeURL|<%=expression%>}"flush="true"/>

另一种是复杂形式支持<jsp:param>动作设置参数。其语法形式如下:

<jsp:include page="{relativeURL|<%=expression%>}"flush="true">

<jsp:param name="parameterName"value="{parameterValue|<%=expression%>}"/>+

</jsp:include>

<jsp:include>动作与include指令元素不相同,include指令在编译为Servlet时插入文件,并且不会随着插入文件的改变而改变。<jsp:include>动作在得到页面请求插入文件是动态变化的,也就是说会随着插入文件的改变而改变。

下面的示例使用<jsp:include>动作元素,在当前页面中插入一段程序片段,运行结果如图3-5。

文件名:includeActon.jsp<%@ page contentType="text/html;charset=gb2312"language="java"%>

978-7-111-44234-9-Chapter03-12.jpg

978-7-111-44234-9-Chapter03-13.jpg

图3-5 <jsp:include>动作例子运行结果

3.4.2 <jsp:forward>

<jsp:forward>动作用来把当前的JSP页面重导到另一个页面上,用户看到的是当前网页的地址,内容则是另一个页面的。该动作有两种形式,如果没有使用<jsp:param>动作元素添加参数,则其语法如下:

978-7-111-44234-9-Chapter03-14.jpg

3.4.3 <jsp:param>

<jsp:param>动作是配合<jsp:forward>、<jsp:include>和<jsp:plugin>一起使用来传递参数的。<jsp:param>动作的语法如下:

<jsp:param name=”name”value=”value”>

其中,name表示参数名,value表示参数值,下面结合一个实例说明<jsp:param>动作元素的作用。

首先,创建如下的forwardParam.jsp:

978-7-111-44234-9-Chapter03-15.jpg

在上面的代码中,使用<jsp:forward>动作对当前页面的请求重定向到forward1.jsp文件,并且使用<jsp:param>动作传递参数param1。

forward1.jsp文件的代码如下:

978-7-111-44234-9-Chapter03-16.jpg

forward1.jsp文件的功能与forwardParam.jsp相似,只是将页面重定向到forward2.jsp文件,forward2.jsp文件的代码如下:

978-7-111-44234-9-Chapter03-17.jpg

978-7-111-44234-9-Chapter03-18.jpg

该示例程序的执行次数是从forwardParam.jsp到forward1.jsp,然后再到forward2.jsp,最终由forward2.jsp接受参数param1和param2。

3.4.4 <jsp:useBean>

这个动作能够让JSP网页中使用JavaBean,从而能够充分应用Java的重用性。也能将页面与商业逻辑更好地分离。JSP动态使用JavaBean组件来扩充JSP的功能,由于JavaBean在开发上以及<jsp:useBean>在使用上简单明了,使得JSP的开发过程和其他动态网页开发有了本质的区别。尽管ASP等动态网页技术也可以使用组件技术,但是由于ActiveX控件在编写上的复杂和使用上的不方便,实际开发工作中使用组件技术并不多。

<jsp:useBean>的语法格式:

978-7-111-44234-9-Chapter03-19.jpg

1)id:命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:use-Bean动作将使用已有的Bean实例而不是创建新的实例.

2)scope:指定Bean在哪种上下文内可用,可以取下面的4个值之一:page,request,session和application。默认值是page,表示该Bean只在当前页面内可用(保存在当前页面的PageContext内)。request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。session表示该Bean对当前HttpSession内的所有页面都有效。最后,如果取值applica-tion,则表示该Bean对所有具有相同ServletContext的页面都有效。scope之所以很重要,是因为jsp:useBean只有在不存在具有相同id和scope的对象时才会实例化新的对象;如果已有id和scope都相同的对象则直接使用已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略。

3)class:指定Bean的完整类名。

4)beanName:指定Bean的名字。如果提供了type属性和beanName属性,允许省略class属性。

5)type:指定引用该对象的变量的类型。它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的。

下面是一个简单的载入Bean的例子。首先创建一个名为Person的JavaBean,下面是Person类的代码:

978-7-111-44234-9-Chapter03-20.jpg

978-7-111-44234-9-Chapter03-21.jpg

编译该文件,放到Tomcat的webapps目录中的项目目录的WEB-INF目录的classes目录下。

然后,创建一个JSP页面文件,文件名JavaBeanDemo.jsp,文件中使用<jsp:useBean>载入该JavaBean,运行结果如图3-6所示,文件内容如下:

978-7-111-44234-9-Chapter03-22.jpg

图3-6 JavaBeanDemo.jsp运行结果

978-7-111-44234-9-Chapter03-23.jpg

978-7-111-44234-9-Chapter03-24.jpg

3.4.5 <jsp:plugin>

<jsp:plugin>动作为Web开发人员提供了一种在JSP文件中嵌入客户端运行的Java(如Applet、JavaBean)的方法。JSP处理这个动作的时候,根据客户浏览器的不同,JSP在执行后分别输出为OBJECT或EMBED这两个不同的HTML元素。

<jsp:plugin>的语法:

978-7-111-44234-9-Chapter03-25.jpg

<jsp:plugin>动作的属性说明。

➢type="bean|applet"。将被执行的插件对象的类型,必须得指定这个是Bean还是Applet,因为这个属性没有默认值。

➢code="classFileName"。将会被Java插件执行的Java Class的名字,必须以.class结尾。这个文件必须存在于codebase属性指定的目录中。

➢codebase="classFileDirectoryName"。将会被执行的Java Class文件的目录(或者是路径),如果你没有提供此属性,那么使用<jsp:plugin>的JSP文件的目录将会被使用。

➢name="instanceName"。这个Bean或Applet实例的名字,它将会在JSP其他的地方调用。

➢archive="URIToArchive,..."。一些由逗号分开的路径名,这些路径名用于预装一些将要使用的class,这会提高Applet的性能。

➢align="bottom|top|middle|left|right"。图形,对象,Applet的位置。

➢height="displayPixels"width="displayPixels"。Applet或Bean将要显示的长宽的值,此值为数字,单位为像素。

➢hspace="leftRightPixels"vspace="topBottomPixels"。Applet或Bean显示时在屏幕左右、上下所需留下的空间,单位为像素。

➢jreversion="JREVersionNumber|1.1"。Applet或Bean运行所需的Java Runtime En-vironment(JRE)的版本,默认值是1.1。

➢nspluginurl="URLToPlugin"。Netscape Navigator用户能够使用的JRE的下载地址,此值为一个标准的URL。

➢iepluginurl="URLToPlugin"。IE用户能够使用的JRE的下载地址,此值为一个标准的URL。

➢<jsp:params>[<jsp:param name="parameterName"value="{parameterValue|<%=expression%>}"/>]+</jsp:params>。需要向Applet或Bean传送的参数或参数值。

下面的例子创建一个Applet程序,并使用<jsp:plugin>动作将其添加到网页中。创建一个名为Banner.java的Applet程序,该程序实现了一个简单的广告条。

978-7-111-44234-9-Chapter03-26.jpg

978-7-111-44234-9-Chapter03-27.jpg

创建一个名为pluginTest.jsp的文件,代码如下:

978-7-111-44234-9-Chapter03-28.jpg