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

5.5 动作标识

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" />

参数说明:

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文件的具体代码如下:

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

运行程序,将显示如图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"/>

参数说明:

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文件的具体代码如下:

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

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

图5.12 请求转发至登录页面

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

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

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

参数说明:

name:用于指定参数名称。

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

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

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

说明

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