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=" All Copyright©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>使用< jsp:include>;动作标识包含文件</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> </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> 密  ;码:<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>动作标识指定的参数,将以“参数名=值”的形式加入到请求中,它的功能与在文件名后面直接加“?参数名=参数值”是相同的。