第4章 JSP动作元素
本章将介绍JSP动作元素的作用,并对JSP动作元素进行分类。将详细介绍其中的JSP基本动作元素,包括<jsp:include>、<jsp:forward>、<jsp:param>、<jsp:plugin>、<jsp:params>、<jsp:fallback>。
· 熟练使用<jsp:include>动作元素来包含文件。
· 熟练使用<jsp:forward>动作元素来实现页面跳转。
· 熟练使用<jsp:param>动作元素来传递参数。
· 了解使用<jsp: plugin >动作元素来执行Applet。
4.1 JSP动作元素分类
JSP动作元素可以用来动态地包含文件、网页跳转及使用JavaBean组件等。JSP动作元素的语法:
<jsp:XXX />
或者
<jsp:XXX > </jsp:XXX>
JSP动作元素分为如下5类。
第一类是与存取JavaBean有关的,包括如下3个动作元素。
<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>
第二类是JSP 1.2就开始有的基本动作元素,包括如下6个动作元素。
<jsp:include> 、 <jsp:forward> 、 <jsp:param> 、 <jsp:plugin> 、 <jsp:params> 、 <jsp:fallback>
第三类是JSP 2.0新增的动作元素,主要与JSP document有关,包括如下6个动作元素。
<jsp:root>、<jsp:declaration>、<jsp:scriptlet>、<jsp:expression>、<jsp:text>、 <jsp:output>
第四类也是JSP 2.0新增的动作元素,主要用来动态地生成XML元素标签的值,包括如下3个动作元素。
<jsp:attribute>、<jsp:body>、<jsp:element>
第五类也是JSP 2.0新增的动作元素,主要用在Tag File中,包括如下2个动作元素。
<jsp:invoke>、<jsp:doBody>
4.2 <jsp:include>动作元素
<jsp:include>动作元素用来包含静态和动态的文件。如果被包含的文件为静态的文件,那么只是单纯地加到JSP页面中,不会进行任何处理;如果被包含的文件为动态的文件,那么会先进行处理,然后将处理的结果加到JSP页面中。
<jsp:include>动作元素的语法格式如下。
<jsp:include page="包含文件URL地址" flush="true | false">
<jsp:include>动作元素包含两个属性:page和flush。
其中page属性用来指定被包含文件的URL地址。flush属性用来指定缓冲区满时,是否进行清空。如果设置为true,那么缓冲区满时将进行清空;如果设置为false,那么缓冲区满时不会进行清空。flush属性的默认值为false。
4.2.1 使用<jsp:include>动作元素包含静态的文件
<jsp:include>动作元素用来包含静态的文件时,只是单纯地加到JSP页面中,不会进行任何处理。
【范例4-1】范例4-1是一个使用<jsp:include>动作元素包含文本文件的示例。其包含两个文件,一个是用来包含文本文件的IncludeTXT.jsp,代码为示例代码4-1(A);一个是被包含的文本文件,代码为示例代码4-1(B)。
示例代码4-1(A) IncludeTXT.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>包含静态文件</title> 05 </head> 06 <body> 07 使用jsp:include动态元素包含静态文件<br> 08 <jsp:include page="content.txt"></jsp:include> 09 </body> 10 </html>
示例代码4-1(B) content. txt
JSP世界欢迎你
【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch04/IncludeTXT.jsp,打开页面如图4-1所示。
图4-1 IncludeTXT.jsp执行结果
【代码解析】示例代码第8行通过使用<jsp:include>动作元素指定包含的文件为content.txt。这时将content.txt文件中的文本加入到IncludeTXT.jsp的执行结果中并显示出来。
4.2.2 使用<jsp:include>动作元素包含动态的文件
<jsp:include>动作元素包含的文件为动态的文件时,会先进行处理,然后将处理的结果加到JSP页面中。
【范例4-2】范例4-2是一个使用<jsp:include>动作元素包含JSP文件的示例。其包含两个文件,一个是用来包含JSP文件的IncludeJSP.jsp,代码为示例代码4-2(A);一个是被包含的JSP文件,代码为示例代码4-2(B)。
示例代码4-2(A) IncludeJSP.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>包含动态文件</title> 05 </head> 06 <body> 07 使用jsp:include动态元素包含动态文件<br> 08 当前日期与时间:<jsp:include page="content.jsp"></jsp:include> 09 </body> 10 </html>
示例代码4-2(B) content.jsp
<%@ page import="java.util.*"%> <%=new Date()%>
【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch04/IncludeJSP.jsp,打开页面如图4-2所示。
图4-2 IncludeJSP.jsp执行结果
【代码解析】示例代码第8行通过使用<jsp:include>动作元素指定包含的JSP文件为content.jsp。这时将content.jsp执行的结果包含到IncludeJSP.jsp文件中,并最终显示在页面上。
4.2.3 <jsp:include>和<%@ include%>的区别
使用<%@ include%>指令元素只是将页面的内容静态地包含进来,如果被包含的文件中有JSP代码,则会执行该代码,而不管该文件是否为动态文件。
【范例4-3】范例4-3是一个使用<%@ include%>指令元素包含文本文件的示例。其包含两个文件,一个是用来包含文本文件的IncludeDirective.jsp,代码为示例代码4-3(A);一个是被包含的包含JSP代码的文本文件,代码为示例代码4-3(B)。
示例代码4-3(A) IncludeDirective.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>包含一个包含JSP代码的文本文件</title> 05 </head> 06 <body> 07 使用include指令元素包含一个包含JSP代码的文本文件<br> 08 当前日期与时间:<%@ include file="content2.txt"%> 09 </body> 10 </html>
示例代码4-3(B) content2.txt
<%@ page import="java.util.*"%> <%=new Date()%>
【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch04/IncludeDirective.jsp,打开页面如图4-3所示。
图4-3 IncludeDirective.jsp执行结果
【代码解析】示例代码第8行通过使用<%@ include%>指令元素包含文本文件content2.txt。这时首先将content2.txt的文本内容加入到IncludeDirective.jsp中,然后再执行IncludeDirective.jsp,所以这时能成功地执行文本文件中的JSP代码。
<jsp:include>动作元素动态地包含文件,如果被包含的文件是静态的,则直接包含内容,不会进行处理;而如果被包含的文件是动态的,则先执行,再包含结果并进行显示。
【范例4-4】示例代码4-4是一个使用<jsp:include>动作元素包含文本文件的示例。
示例代码4-4 IncludeAction.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>包含一个包含JSP代码的文本文件</title> 05 </head> 06 <body> 07 使用include动作元素包含一个包含JSP代码的文本文件<br> 08 当前日期与时间:<jsp:include page="content2.txt"></jsp:include> 09 </body> 10 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/IncludeAction.jsp”,打开页面如图4-4所示。
图4-4 IncludeAction.jsp执行结果
【代码解析】示例代码第8行通过使用<jsp:include>动作元素包含文本文件content2.txt。因为content2.txt为静态文件,所以只有当IncludeAction.jsp处理完成后,才会将content2.txt的内容进行包含,所以这时文本文件中的JSP代码并没有执行,而是原样输出。其中页面源代码如下。
01 <html> 02 <head> 03 <title>包含一个包含JSP代码的文本文件</title> 04 </head> 05 <body> 06 使用include动作元素包含一个包含JSP代码的文本文件<br> 07 当前日期与时间:<%@ page import="java.util.*"%> 08 <%=new Date()%> 09 </body> 10 </html>
通过范例4-3和范例4-4可以看出<jsp:include>动作元素和<%@ include%>指令元素的区别如下。
使用<%@ include%>指令元素是将所有的被包含文件包含进来之后,再进行编译等处理,可以简单地称其为“先包含再处理”。
而使用<jsp:include>动作元素先将所有的代码处理完成之后,再将处理完成的代码的结果包含进行,可以简单地称其为“先处理再包含”。
4.3 <jsp:forward>动作元素
<jsp:forward>动作元素用来转移用户的请求,使得用户请求的页面从一个页面跳转到另一个页面。这种跳转为服务器端跳转,所以用户的地址栏不会发生任何变化。
<jsp: forward >动作元素的语法格式如下。
<jsp: forward page="跳转文件URL地址" >
<jsp:include>动作元素只包含一个属性即page,page属性用来指定跳转文件的URL地址。
4.3.1 使用<jsp: forward >动作元素实现页面跳转
使用<jsp: forward >动作元素实现页面跳转非常简单,只需要设置其page属性为跳转到文件的URL地址即可。
【范例4-5】范例4-5是一个使用<jsp: forward >动作元素实现页面跳转的示例。其包含两个文件,一个是用来跳转的页面ForwardAction.jsp,代码为示例代码4-5(A);另一个是跳转到的页面,代码为示例代码4-5(B)。
示例代码4-5(A) ForwardAction.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>jsp:forward动作指令</title> 05 </head> 06 <body> 07 使用jsp:forward动作指令实现服务器端跳转。 08 <jsp:forward page="Forwarded.jsp"></jsp:forward> 09 </body> 10 </html>
示例代码4-5(B) Forwarded.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转到的页面</title> 05 </head> 06 <body> 07 跳转到的页面 08 </body> 09 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/ForwardAction.jsp”,打开页面如图4-5所示。
图4-5 ForwardAction.jsp执行结果
【代码解析】ForwardAction.jsp中代码第8行通过使用<jsp:forward >动作元素,指定其page属性为Forwarded.jsp,从而实现页面跳转到Forwarded.jsp。
4.3.2 跳转执行流程
如果JSP文件包含<jsp: forward >动作元素,那么JSP会首先执行<jsp: forward >动作元素之前的代码。只有执行到<jsp: forward >动作元素时才会进行跳转,跳转完成后将执行被跳转的JSP文件,<jsp:forward >动作元素之后的代码将不会被执行。
【范例4-6】示例代码4-6是一个使用<jsp: forward >动作元素实现页面跳转的示例。
示例代码4-6 ForwardAction2.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>jsp:forward动作指令</title> 05 </head> 06 <body> 07 使用jsp:forward动作指令实现服务器端跳转。 08 <% 09 System.out.println("jsp:forward动作指令之前代码被执行"); //控制台打印输出 10 %> 11 <jsp:forward page="Forwarded.jsp"></jsp:forward> 12 <% 13 System.out.println("jsp:forward动作指令之后代码被执行"); //控制台打印输出 14 %> 15 </body> 16 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/ForwardAction2.jsp”,打开页面如图4-6所示。
图4-6 IncludeAction2.jsp执行结果
在Tomcat服务器控制台输出如下字符串。
jsp:forward动作指令之前代码被执行
【代码解析】示例代码中通过分别在<jsp: forward >动作元素执行前后添加控制台打印语句,从而观测跳转的执行流程。
4.4 <jsp:param>动作元素
<jsp:param>动作元素用来传递参数,一般与<jsp:include>、<jsp:forward>联合使用。其语法格式如下。
<jsp:param name="参数名" value="参数值"/>
<jsp:param>动作元素包含两个属性,一个是name,用来设定传递参数的名称;一个是value,用来设定传递参数的值。
4.4.1 <jsp:include>动作元素搭配<jsp:param>动作元素
通过<jsp:include>动作元素搭配<jsp:param>动作元素,可以实现在包含文件的同时向被包含文件传递参数。
【范例 4-7】范例 4-7是一个使用<jsp:param>动作元素联合<jsp:include>动作元素的示例。其包含两个文件,一个是用来包含 JSP文件并传递参数的ParamInclude.jsp,如示例代码4-7(A)所示;一个是被包含的JSP文件,如示例代码4-7(B)所示。
示例代码4-7(A) ParamInclude.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>包含JSP文件并传递参数</title> 05 </head> 06 <body> 07 使用include动作元素包含一个包含JSP文件,并传递参数<br> 08 <jsp:include page="contentDemo.jsp"> 09 <jsp:param name="age" value="19"/> 10 </jsp:include> 11 </body> 12 </html>
示例代码4-7(B) contentDemo.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <h2>被包含页</h2> 03 <p>接收到的参数:</p> 04 <% 05 String strAge = request.getParameter("age"); //接收参数 06 %> 07 <%--输出参数内容--%> 08 <%="age参数值为" + strAge %>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/ParamInclude.jsp”,打开页面如图4-7所示。
图4-7 ParamInclude.jsp执行结果
【代码解析】ParamInclude.jsp代码的第8行通过使用<jsp:include>动作指定包含contentDemo.jsp文件。同时在第9行通过使用<jsp:param>动作元素来为包含页面传递参数。被包含的JSP文件contentDemo.jsp,通过使用“request.getParameter("age")”接收age参数值,并赋值给字符串变量str,最后通过JSP表达式输出变量str的值。
前一个范例介绍了如何使用<jsp:param>动作元素传递一个参数,下面来看如何通过多个<jsp:param>动作元素来传递多个参数。
【范例 4-8】范例 4-8是一个使用<jsp:param>动作元素联合<jsp:include>动作元素的示例,该示例将在JSP文件中包含另一个JSP文件,并传递多个参数。该范例包含两个文件,一个是用来包含JSP文件并传递参数的ParamInclude2.jsp,如示例代码4-8(A)所示;一个是被包含的JSP文件,如示例代码4-8(B)所示。
示例代码4-8(A) ParamInclude2.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>包含JSP文件并传递多个参数</title> 05 </head> 06 <body> 07 使用include动作元素包含一个包含JSP文件,并传递多个参数<br> 08 <jsp:include page="contentDemo2.jsp"> 09 <jsp:param name="name" value="Jame"/> 10 <jsp:param name="age" value="19"/> 11 <jsp:param name="sex" value="man"/> 12 </jsp:include> 13 </body> 14 </html>
示例代码4-8(B) contentDemo2.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <h2>被包含页</h2> 03 <p>接收到的参数:</p> 04 <% 05 String strName = request.getParameter("name"); //接收参数name 06 String strAge = request.getParameter("age"); //接收参数age 07 String strSex = request.getParameter("sex"); //接收参数sex 08 %> 09 <%--输出参数内容--%> 10 <%="name参数值为" + strName %> 11 <%=",age参数值为" + strAge %> 12 <%=",sex参数值为" + strSex %>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/ParamInclude2.jsp”,打开页面如图4-8所示。
图4-8 ParamInclude2.jsp执行结果
【代码解析】ParamInclude2.jsp代码的第8行通过使用<jsp:include>动作指定包含contentDemo2.jsp文件。同时在第9行、第10行、第11行,通过使用<jsp:param>动作元素来为包含页面传递三个参数。被包含的JSP文件contentDemo2.jsp,通过使用request.getParameter()方法,分别接收name、age及sex参数值,并赋值给字符串变量,最后通过JSP表达式输出变量的值。
4.4.2 <jsp:forward>动作元素搭配<jsp:param>动作元素
通过<jsp:forward>动作元素搭配<jsp:param>动作元素,可以实现在跳转页面的同时向跳转到页面传递参数。
【范例4-9】范例4-9是一个使用<jsp:param>动作元素联合<jsp: forward >动作元素的示例,该示例将从一个JSP文件跳转到另一个JSP文件,并传递一个参数。该范例包含两个文件,一个是用来设置跳转并传递参数的ParamForward.jsp,如示例代码4-9(A)所示;一个是跳转到的JSP页面,如示例代码4-9(B)所示。
示例代码4-9(A) ParamForward.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转并传递参数</title> 05 </head> 06 <body> 07 使用forward动作元素跳转到另一个JSP文件,并传递参数<br> 08 <jsp:forward page="ForwardedDemo.jsp"> 09 <jsp:param name="age" value="19"/> 10 </jsp:forward> 11 </body> 12 </html>
示例代码4-9(B) ForwardedDemo.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转到的页面</title> 05 </head> 06 <body> 07 <h2>跳转到的页面</h2> 08 <p>接收到的参数:</p> 09 <% 10 String strAge = request.getParameter("age"); //接收参数 11 %> 12 <%--输出参数内容--%> 13 <%="age参数值为" + strAge %> 14 </body> 15 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入http://localhost:8080/Prj_test/ch04/ParamForward.jsp,打开页面如图4-9所示。
图4-9 ParamForward.jsp执行结果
【代码解析】ParamForward.jsp代码的第8行中,通过使用<jsp: forward >动作元素指定页面跳转到Forwarded Demo.jsp。同时在第9行通过使用<jsp:param>动作元素来为跳转页面传递参数。在跳转到的JSP文件Forwarded Demo.jsp中,通过使用“request.getParameter ("age")”接收age参数值,并赋值给字符串变量str,最后通过JSP表达式输出变量str的值。
前一个范例介绍了如何使用<jsp:param>动作元素传递一个参数,下面来看如何通过多个<jsp:param>动作元素来传递多个参数。
【范例4-10】范例4-10是一个使用<jsp:param>动作元素联合<jsp: forward >动作元素的示例,该示例将从一个JSP文件跳转到另一个JSP文件,并传递多个参数。该范例包含两个文件,一个是用来设置跳转并传递参数的ParamForward2.jsp,如示例代码4-10(A)所示;一个是跳转到的JSP页面,如示例代码4-10(B)所示。
示例代码4-10(A) ParamForward2.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转并传递参数</title> 05 </head> 06 <body> 07 使用forward动作元素跳转到另一个JSP文件,并传递参数<br> 08 <jsp:forward page="ForwardedDemo2.jsp"> 09 <jsp:param name="name" value="Jame"/> 10 <jsp:param name="age" value="19"/> 11 <jsp:param name="sex" value="man"/> 12 </jsp:forward> 13 </body> 14 </html>
示例代码4-10(B) ForwardedDemo2.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转到的页面</title> 05 </head> 06 <body> 07 <h2>跳转到的页面</h2> 08 <p>接收到的参数:</p> 09 <% 10 String strName = request.getParameter("name"); //接收参数name 11 String strAge = request.getParameter("age"); //接收参数age 12 String strSex = request.getParameter("sex"); //接收参数sex 13 %> 14 <%--输出参数内容--%> 15 <%="name参数值为" + strName %> 16 <%=",age参数值为" + strAge %> 17 <%=",sex参数值为" + strSex %> 18 </body> 19 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/ParamForward2.jsp”,打开页面如图4-10所示。
图4-10 ParamForward2.jsp执行结果
【代码解析】ParamForward2.jsp代码的第8行中,通过使用<jsp: forward >动作元素指定页面跳转到ForwardedDemo2.jsp。同时在第9行、第10行、第11行,通过使用<jsp:param>动作元素来为跳转页面传递三个参数。在跳转到的JSP文件ForwardedDemo2.jsp中,通过使用request.getParameter()方法,分别接收name、age及sex参数值,并赋值给字符串变量,最后通过JSP表达式输出变量的值。
4.5 <jsp:plugin>、<jsp:params>和<jsp:fallback>
<jsp:plugin>、<jsp:params>和<jsp:fallback>三个动作元素,一般都是搭配起来使用的。其中<jsp:plugin>动作元素用来在JSP中嵌入Java插件;<jsp:params>动作元素用来给Bean或Applet传递参数;<jsp:fallback>动作元素用来指定当浏览器不支持或无法启动 Bean或Applet时,在页面上打印输出错误提示信息。
4.5.1 <jsp:plugin>动作元素
<jsp:plugin>动作元素用来在JSP中嵌入Java插件,比如Applet。<jsp:plugin>动作元素会自动根据浏览器版本替换成<object>标签或<embed>标签。其中<object>用于HTML 4.0版本,而<embed>标签用于HTML 3.2版本。
<jsp:plugin>动作元素的语法格式如下。
<jsp:plugin type="bean | applet" name="Applet名称" code="Java类名" codebase="Java类所在目录" align="对齐方式" height="高度" width="宽度"> hspace="水平间距" vspace="垂直间距" archive="预先加载的类列表" jreversion="JRE版本" iepluginurl="URL" nspluginurl="URL" </jsp:plugin>
各属性的名称及属性作用如表4-1所示。
表4-1 <jsp:plugin>动作元素属性及属性作用
【范例4-11】示例代码4-11是一个使用<jsp:plugin>动作元素插入一个Applet的示例。
示例代码4-11 JSPPlugin.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>执行Applet</title> 05 </head> 06 <body> 07 <%-- 指定其Java类为Clock.class,所在目录为Applet,类型为applet --%> 08 <jsp:plugin code="Clock.class" codebase="Applet" type="applet"> </jsp:plugin> 09 </body> 10 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/JSPPlugin.jsp”,打开页面如图4-11所示。
图4-11 JSPPlugin.jsp执行结果
【代码解析】示例代码中第8行通过使用<jsp:plugin>动作元素来插入Applet。其中通过设置<jsp:plugin>动作元素的type为“applet”来指定要插入的插件类型为Applet。通过设置其code属性来指定其Java类名,通过设置其codebase属性来指定其Java类所在的路径。
4.5.2 <jsp:params>动作元素
<jsp:params>动作元素用来给Bean或Applet传递参数,一般搭配<jsp:param>使用。其语法格式如下。
<jsp:plugin> <jsp:params> <jsp:param name="参数名" value="参数值"/> </jsp:params> </jsp:plugin>
【范例4-12】 示例代码4-12是使用<jsp: params >动作元素来给Applet传递参数的示例。
示例代码4-12 JSPPlugin2.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>执行Applet</title> 05 </head> 06 <body> 07 <%-- 指定其Java类为Clock.class,所在目录为Applet,类型为applet --%> 08 <jsp:plugin code="Clock.class" codebase="Applet" type="applet"> 09 <%-- 传递三个参数--%> 10 <jsp:params> 11 <jsp:param name="bgcolor" value="000000"/> 12 <jsp:param name="fgcolor1" value="ff0000"/> 13 <jsp:param name="fgcolor2" value="00ff00"/> 14 </jsp:params> 15 </jsp:plugin> 16 </body> 17 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/JSPPlugin2.jsp”,打开页面如图4-12所示。
图4-12 JSPPlugin2.jsp执行结果
【代码解析】示例代码第10行首先添加了一个<jsp:params>动作元素用来传递参数。在<jsp:params>动作元素添加<jsp:param>动作元素来指定具体的参数名及参数值。如本示例中通过<jsp:params>动作元素传递了三个参数,分别为bgcolor、fgcolor1及 fgcolor2,其值分别为000000、ff0000及00ff00。
4.5.3 <jsp:fallback>动作元素
<jsp:fallback>动作元素用来指定当浏览器不支持或无法启动Bean或Applet时,在页面上打印输出错误提示信息。其语法格式如下。
<jsp: fallback > <jsp:fallback>错误信息</jsp:fallback> </jsp: fallback >
【范例4-13】示例代码4-13是一个使用<jsp: fallback >动作元素来给Applet传递参数的示例。
示例代码4-13 JSPPlugin2.jsp
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>执行Applet</title> 05 </head> 06 <body> 07 <%-- 指定其Java类为Clock.class,所在目录为Applet,类型为applet --%> 08 <jsp:plugin code="Clock.class" codebase="Applet" type="applet"> 09 <%-- 传递三个参数--%> 10 <jsp:params> 11 <jsp:param name="bgcolor" value="000000"/> 12 <jsp:param name="fgcolor1" value="ff0000"/> 13 <jsp:param name="fgcolor2" value="00ff00"/> 14 </jsp:params> 15 <%-- 无法加载时输出错误信息--%> 16 <jsp:fallback> 17 不能加载该Applet 18 </jsp:fallback> 19 </jsp:plugin> 20 </body> 21 </html>
【代码解析】示例代码第16行通过添加<jsp:fallback>动作元素用来指定当浏览器不支持或无法启动 Bean 或 Applet 时,在页面上打印输出错误提示信息。其错误信息为“不能加载该Applet”。
4.6 综合练习
在一个JSP文件中使用<jsp:forward>动作元素跳转到另一个JSP文件,同时传递参数name。而在跳转到的页面同样使用<jsp:forward>动作元素跳转到另一个JSP文件,同时也传递同样的参数name。在最后跳转到的页面中获得该参数,并输出参数的值。
第一个跳转页面PracticeForward.jsp代码如下。 01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转页面1</title> 05 </head> 06 <body> 07 使用jsp:forward动作指令实现服务器端跳转。 08 <%-- 使用forward动作指令进行跳转,并传递参数--%> 09 <jsp:forward page="PracticeForward2.jsp"> 10 <jsp:param name="name" value="YaoMing"/> 11 </jsp:forward> 12 </body> 13 </html
第二个跳转页面PracticeForward2.jsp代码如下。
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转页面2</title> 05 </head> 06 <body> 07 使用jsp:forward动作指令实现服务器端跳转。 08 <%-- 使用forward动作指令进行跳转,并传递参数--%> 09 <jsp:forward page="PracticeForward3.jsp"> 10 <jsp:param name="name" value="James"/> 11 </jsp:forward> 12 </body> 13 </html>
最后调转到的页面PracticeForward2.jsp代码如下。
01 <%@ page language="java" contentType="text/html;charset=gb2312"%> 02 <html> 03 <head> 04 <title>跳转到的页面</title> 05 </head> 06 <body> 07 <h2>跳转到的页面</h2> 08 <p>接收到的参数:</p> 09 <% 10 String strName = request.getParameter ("name"); //接收参数 11 %> 12 <%--输出参数内容--%> 13 <%="name参数值为" + strName %> 14 </body> 15 </html>
【运行结果】打开IE浏览器,在浏览器地址栏中输入“http://localhost:8080/Prj_test/ch04/PracticeForward.jsp”,打开页面如图4-13所示。
图4-13 PracticeForward.jsp执行结果
4.7 小结
JSP动作元素包含了非常多的元素,本章抽出了其中6个基本动作元素进行了详细介绍。<jsp:include>和<%@ include%>两种包含,历来是许多初学者犯难之处,希望读者能对照书中的示例来弄清这两种包含的区别。<jsp:forward>动作元素也是在开发中比较常用的,读者应该能够熟悉如何通过其实现服务器端跳转,同时还必须了解跳转执行流程。
4.8 习题
一、填空题
1.JSP 基本动作元素包括了6个动作元素,分别是___________、___________、___________、___________、___________和___________。
2.<jsp:include>动作元素用来包含___________和___________的文件。
3.<jsp:forward>动作元素用来__________,使得用户请求的页面从一个页面跳转到另一个页面。
4.<jsp:param>动作元素用来__________。
二、选择题
1.使用<jsp:include>动作元素是___________的包含文件,如果文件中包含 JSP代码,___________总是执行。
A.动态
B.静态
C.不会
D.会
2.使用<jsp:param>动作元素可以传递___________参数。
A.1个
B.2个
C.多个
D.一个或多个
3.___________指令用来实现跳转。
A.<jsp:include>
B.<jsp:forward>
C.<jsp:plugin>
D.<jsp:fallback>
三、简答题
1.简述JSP动作元素分为几类,以及各类动作元素的作用和包含的动作元素。
2.简述<jsp:include>动作元素如何搭配<jsp:param>动作元素,并实现包含页面传递参数。
3.简述<jsp: forward >动作元素如何搭配<jsp:param>动作元素,并实现跳转页面传递参数。
四、编程题
1.编写一个JSP程序,使用<jsp: forward >动作元素实现跳转,并通过<jsp:param>动作元素传递参数,在跳转页中接收参数并输出。
2.编写一个JSP程序,使用<jsp: include >动作元素实现包含页面,并通过<jsp:param>动作元素传递参数,在包含页中接收参数并输出。