Java Web从入门到精通(第2版)
上QQ阅读APP看书,第一时间看更新

5.5 动作标识

视频讲解:光盘\TM\lx\5\12动作标识.mp4

5.5.1 包含文件标识<jsp:include>

JSP的动作标识<jsp:include>用于向当前页面中包含其他的文件。被包含的文件可以是动态文件,也可以是静态文件。<jsp:include>动作标识包含文件的过程如图5.9所示。

图5.9 <jsp:include>动作标识包含文件的过程

<jsp:include>动作标识的语法格式如下:

        <jsp:include page="url" flush="false|true" />

      <jsp:include page="url" flush="false|true" >
          子动作标识<jsp:param>
      </jsp:include>

参数说明:

page:用于指定被包含文件的相对路径。例如,指定属性值为top.jsp,则表示包含的是与当前JSP文件相同文件夹中的top.jsp文件包含到当前JSP页面中。

flush:可选属性,用于设置是否刷新缓冲区。默认值为false,如果设置为true,在当前页面输出使用了缓冲区的情况下,先刷新缓冲区,然后再执行包含工作。

子动作标识<jsp:param>:用于向被包含的动态页面中传递参数。关于<jsp:param>标识的详细介绍请参见5.5.3节。

说明

<jsp:include>标识对包含的动态文件和静态文件的处理方式是不同的。如果被包含的是静态文件,则页面执行后,在使用了该标识的位置将会输出这个文件的内容。如果<jsp:include>标识包含的是一个动态文件,那么JSP编译器将编译并执行这个文件。<jsp:include>标识会识别出文件的类型,而不是通过文件的名称来判断该文件是静态的还是动态的。

技巧

在应用<jsp:include>标识进行文件包含时,为了使整个页面的层次结构不发生冲突,建议在被包含页面中将<html>、<body>等标记删除。

【例5.22】应用<jsp:include>标识包含网站Banner和版权信息栏。(实例位置:光盘\TM\sl\5\5)

(1)编写一个名称为top.jsp的文件,用于放置网站的Banner信息和导航条。这里将Banner信息和导航栏设计为一张图片。这样完成top.jsp文件,只需要在该页面中通过<img>标记引入图片即可。top.jsp文件的代码如下:

        <%@ page pageEncoding="GB18030"%>
        <img src="images/banner.JPG">

(2)编写一个名称为copyright.jsp的文件,用于放置网站的版权信息。copyright.jsp文件的具体代码如下:

        <%@ page pageEncoding="GB18030"%>
        <%
        String copyright="&nbsp; All Copyright&copy;2016 吉林省明日科技有限公司";
        %>
        <table width="778" height="61" border="0" cellpadding="0" cellspacing="0" background="images/copyright.JPG">
          <tr>
            <td> <%= copyright %></td>
          </tr>
        </table>

(3)创建一个名称为index.jsp的文件,在该页面中包含top.jsp和copyright.jsp文件,从而实现一个完整的页面。index.jsp文件的具体代码如下:

        <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
        <title>使用&lt; jsp:include&gt;动作标识包含文件</title>
        </head>
        <body style="margin:0px; ">
        <jsp:include page="top.jsp"/>
        <table width="781" height="279" border="0" cellpadding="0" cellspacing="0" background="images/center.JPG">
          <tr>
            <td>&nbsp; </td>
          </tr>
        </table>
        <jsp:include page="copyright.jsp"/>
        </body>
        </html>

运行程序,将显示如图5.10所示的效果。

图5.10 运行结果

技巧

如果要在JSP页面中显示大量的纯文本,可以将这些文本文字写入静态文件(如记事本)中,然后通过include指令或动作标识包含到该JSP页面,这样可以让JSP页面更简洁。

在前面的章节中介绍了include指令,该指令与<jsp:include>动作标识相同,都可以用来包含文件。但它们之间是存在很大差别的。下面将对include指令与<jsp:include>动作标识的区别进行详细介绍。

(1)include指令通过file属性指定被包含的文件,并且file属性不支持任何表达式;<jsp:include>动作标识通过page属性指定被包含的文件,而且page属性支持JSP表达式。

(2)使用include指令时,被包含的文件内容会原封不动地插入到包含页中,然后JSP编译器再将合成后的文件最终编译成一个Java文件;使用<jsp:include>动作标识包含文件时,当该标识被执行时,程序会将请求转发(注意是转发,而不是请求重定向)到被包含的页面,并将执行结果输出到浏览器中,然后返回包含页,继续执行后面的代码。因为服务器执行的是多个文件,所以JSP编译器会分别对这些文件进行编译。

(3)在应用include指令包含文件时,由于被包含的文件最终会生成一个文件,所以在被包含文件、包含文件中不能有重名的变量或方法;而在应用<jsp:include>动作标识包含文件时,由于每个文件是单独编译的,所以在被包含文件和包含文件中重名的变量和方法是不相冲突的。

5.5.2 请求转发标识<jsp:forward>

通过<jsp:forward>动作标识可以将请求转发到其他的Web资源,例如,另一个JSP页面、HTML页面、Servlet等。执行请求转发后,当前页面将不再被执行,而是去执行该标识指定的目标页面。执行请求转发的基本流程如图5.11所示。

图5.11 执行请求转发的基本流程

<jsp:forward>动作标识的语法格式如下:

        <jsp:forward page="url"/>

        <jsp:forward page="url">
            子动作标识<jsp:param>
        </jsp:forward>

参数说明:

page:用于指定请求转发的目标页面。该属性值可以是一个指定文件路径的字符串,也可以是表示文件路径的JSP表达式。但是请求被转向的目标文件必须是内部的资源,即当前应用中的资源。

子动作标识<jsp:param>:用于向转向的目标文件中传递参数。关于<jsp:param>标识的详细介绍请参见5.5.3节。

【例5.23】应用<jsp:forward>标识将页面转发到用户登录页面。(实例位置:光盘\TM\sl\5\6)

(1)创建一个名称为index.jsp的文件,该文件为中转页,用于通过<jsp:forward>动作标识将页面转发到用户登录页面(login.jsp)。index.jsp文件的具体代码如下:

        <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
        <title>中转页</title>
        </head>
        <body>
        <jsp:forward page="login.jsp"/>
        </body>
        </html>

(2)编写login.jsp文件,在该文件中添加用于收集用户登录信息的表单及表单元素。具体代码如下:

        <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
        <title>用户登录</title>
        </head>
        <body>
        <form name="form1" method="post" action="">
        用户名:<input name="name" type="text" id="name" style="width: 120px"><br>
        密&nbsp; &nbsp;码:<input name="pwd" type="password" id="pwd" style="width: 120px"> <br>
        <br>
        <input type="submit" name="Submit" value="提交">
        </form>
        </body>
        </html>

运行实例,将显示如图5.12所示的用户登录页面。

图5.12 请求转发至登录页面

5.5.3 传递参数标识<jsp:param>

JSP的动作标识<jsp:param>可以作为其他标识的子标识,用于为其他标识传递参数。其语法格式如下:

        <jsp:param name="参数名" value="参数值" />

参数说明:

name:用于指定参数名称。

value:用于设置对应的参数值。

【例5.24】通过<jsp:param>标识为<jsp:forward>标识指定参数,可以使用下面的代码:

        <jsp:forward page="modify.jsp">
            <jsp:param name="userId" value="7"/>
        </jsp:forward>

在上面的代码中,实现了在请求转发到modify.jsp页面的同时,传递了参数userId,其参数值为7。

说明

通过<jsp:param>动作标识指定的参数,将以“参数名=值”的形式加入到请求中,它的功能与在文件名后面直接加“?参数名=参数值”是相同的。