![Java Web从入门到精通(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/416/31794416/b_31794416.jpg)
5.5 动作标识
5.5.1 包含文件标识<jsp:include>
JSP的动作标识<jsp:include>用于向当前页面中包含其他的文件。被包含的文件可以是动态文件,也可以是静态文件。<jsp:include>动作标识包含文件的过程如图5.9所示。
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer73.jpg?sign=1739522630-qYjBbnKzTlDtAQbDiCAE0e6Rx0KNMSVU-0-48362d0f1ed5639ba5198faf10995f95)
图5.9 <jsp:include>动作标识包含文件的过程
<jsp:include>动作标识的语法格式如下:
<jsp:include page="url" flush="false|true" />
或
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer72.jpg?sign=1739522630-w6htHb1gSN0RWUD4nEFRkDKgVshnaGDU-0-8de00ab679e1d428dd7564a28664a74c)
参数说明:
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文件的具体代码如下:
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer74.jpg?sign=1739522630-QqA54NHRBbZCTyDYw6224QAgaEjzV1tC-0-28dd3fa861bb40f99d1ae6da9c78b133)
(3)创建一个名称为index.jsp的文件,在该页面中包括top.jsp和copyright.jsp文件,从而实现一个完整的页面。index.jsp文件的具体代码如下:
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer75.jpg?sign=1739522630-skGB25MadA7c6IX7aNDBahElGfx0XzLM-0-f9db725857f30b6a8d87019047e1207c)
运行程序,将显示如图5.10所示的效果。
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer77.jpg?sign=1739522630-eUuBX6liMt99WGwpyFIsAkxl6GwZF3MW-0-9bbee1a7b762d11964c702943adfc2f8)
图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所示。
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer76.jpg?sign=1739522630-EYqrjK7Ir7T2dMJO2MNq4Osc8kYMRWfc-0-dfd3d427acde5285c93d3126332883a2)
图5.11 执行请求转发的基本流程
<jsp:forward>动作标识的语法格式如下:
<jsp:forward page="url"/>
或
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer78.jpg?sign=1739522630-nh7iTCwvQIUXBScnPcOqPEOHmDwvKZ3Z-0-9d111a493b53b688c73fff78e9f4e272)
参数说明:
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文件的具体代码如下:
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer79.jpg?sign=1739522630-4BqC7WR635P76Mt3mH4GCSrwKe105nZa-0-e92e2689e36c2591aa73856c94d09de3)
(2)编写login.jsp文件,在该文件中添加用于收集用户登录信息的表单及表单元素。具体代码如下:
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer80.jpg?sign=1739522630-qCxeNiZsPbmHGXLYa0sCXoysRVdkFJoo-0-c48c6043053015d94a7fe0bb0e39dbc0)
运行实例,将显示如图5.12所示的用户登录页面。
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer81.jpg?sign=1739522630-TBMBxfKMcsJPrzyUA2rHdshTmg2YgNC9-0-5d46a217efbe0f4081c4e19a03ce391e)
图5.12 请求转发至登录页面
5.5.3 传递参数标识<jsp:param>
JSP的动作标识<jsp:param>可以作为其他标识的子标识,用于为其他标识传递参数。语法格式如下:
<jsp:param name="参数名" value="参数值" />
参数说明:
name:用于指定参数名称。
value:用于设置对应的参数值。
【例5.24】 通过<jsp:param>标识为<jsp:forward>标识指定参数,可以使用下面的代码:
![](https://epubservercos.yuewen.com/3A7F3C/17214367504799006/epubprivate/OEBPS/Images/figer82.jpg?sign=1739522630-00mqsRPMe7akE8pMSLMsIKRiGE5rqJiE-0-0495163d0b115f33a63dc27bff6815b5)
在上面的代码中,实现了在请求转发到modify.jsp页面的同时,传递了参数userId,其参数值为7。
说明
通过<jsp:param>动作标识指定的参数,将以“参数名=值”的形式加入请求中。它的功能与在文件名后面直接加“?参数名=参数值”是相同的。