21天学通Java Web开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第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>动作元素传递参数,在包含页中接收参数并输出。