7.4 JSP doBody动作
7.4 doBody
doBody
动作元素只能在tag file
中使用,它用来调用一个标签的标签体中的内容。在7.3.5
小节中我们已经使用到了doBody
动作元素,现在我们来介绍更详细的内容。doBody
动作元素也可以有属性。你可以通过这些属性来指定某个变量来接收标签体中的内容,如果不使用这些指令,那么**doBody
动作元素会把标签体之中的内容写到JSP
页面的JspWriter
上**。
doBody动作元素的属性
doBody
动作元素的属性见下表所示,所有的**这些属性都是非必须的
**。
属性 | 描述 |
---|---|
var |
用于保存标签体内容的变量值,标签体内容会以java.lang.String 类型保存到这个var 变量内。var 和varReader 属性只能出现一个 |
varReader |
用于保存标签体内容的变量值,标签体内容会以java.io.Reader 类型保存到这个varReader 变量内。var 和varReader 属性只能出现一个 |
scope |
变量保存到的作用域 |
实例
HTTP Referer简介
HTTP Referer
是header
的一部分,当浏览器向web
服务器发送请求的时候,一般会带上Referer
,**referer
告诉服务器当前页面是从哪个页面链接过来的**,服务器藉此可以获得一些信息用于处理。比如从我主页上有一个到朋友主页上的链接,他的服务器可以通过HTTP Referer
中统计出每天有多少用户通过点击我主页上的链接访问他的网站。
实例说明
下面的这个例子说明了如何用doBody
来调用标签本体内容并将内容保存在一个叫作referer
的变量中。
假设你有一个卖玩具的商城网站,并且在多个搜索引擎上做了这个玩具网站的广告。现在你想要知道每个搜索引擎为玩具网站带来的流量有多少转化成了购买行为。为了做到这点,你可以记录每个网站首页访问的referer
头部信息,使用一个tag file
来将referer
头信息保存到session
属性中。如果某个用户在后续购买了产品,就可以从session
属性中获得referer
头信息,并记录在数据库中。
这个例子包含了两个表示搜索引擎的HTML
文件(searchEngine.html
,searchEngine2.html
)、两个JSP
文件(main.jsp
和 viewReferer.jsp
)以及一个tag file
(doBodyDemo.tag
)。main.jsp
页面是玩具网站的首页,使用了doBodyDemo
标签来保存referer
头信息。viewReferer.jsp
页面用来查看收集到的referer
头信息。**如果直接通过URL
访问main.jsp
,那么referer
头信息即为null
**。因此你必须通过searchEngine.html
来链接到main.jsp
页面。
doBodyDemo.tag
1 | <jsp:doBody var="referer" scope="session"/> |
没错,doBodyDemo.tag
只有一行:一个doBody
动作元素。它指定了一个叫作referer
的session
属性来保存标签的标签体
中的内容。
main.jsp
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
main.jsp
页面通过文本和EL
表达式输出referer
头信息(上一个页面的URL
)如下:
1 | 上一个页面的URL:${header.referer} |
main.jsp
页面使用了doBodyDemo
标签,标签体也输出了referer
头信息:
1 | <tags:doBodyDemo> |
紧接着,输出一个指向ViewReferer
页面的链接:
1 | <a href="viewReferer.jsp">显示session中的referer属性</a> |
viewReferer.jsp文件
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
viewReferer.jsp
页面通过EL
表达式将referer
中保存的值打印了出来。
searchEngine.html
1 | <h3>搜索引擎1</h3> |
可以通过以下URL
访问 searchEngine.html
来查看结果:
http://localhost:8080/app07a/searchEngine.html
结果如下图所示:
现在点击这个链接跳转到main.jsp
页面,main.jsp
中获取的referer
头信息将包含searchEngine.html
的URL
地址。如下图所示:main.jsp
页面调用了doBodyDemo
元素标签,doBodyDemo
标签中通过doBody
动作将内容存储在名为referer
的session
属性中。
接下来,点击main.jsp
中的View
链接,就可以在viewReferer.jsp
页面中看到session
中的这个内容了,如下图所示.
searchEngine2.html
1 | <h3>搜索引擎2</h3> |
searchEngine2.html
用来模拟广告所在的第二个页面
可以通过以下URL
访问 searchEngine2.html
来查看结果:
http://localhost:8080/app07a/searchEngine2.html
点击访问主页
链接:即可链接到商城主页(main.jsp
)显示效果如下: