日期:2014-05-16  浏览次数:20299 次

jsp行为元素

行为元素

行为元素的作用:与指示元素不同,行为元素是与特定的请求相关的。它通过使用、修改或创建对象来影响服务器的输出流
行为元素可分为两种:
标准行为元素:由JSP规范定义,有着统一的后缀名jsp。一共有20多个
自定义行为元素:由用户自己定义的行为元素。通过定制标记库的方式,由taglib指示元素引入到JSP中
所有行为元素的语法都是基于XML的

1

<jsp:include>????

<jsp:include>行为元素的作用是:在请求时把指定的服务器资源(例如servlet、jsp等)的输出引入到当前的JSP页面中。也就是说,当每次JSP页面被调用时,指定资源的输出被请求,并插入到当前页面中
当遇到<jsp:include>标记时,控制就被传送给引用的资源。一旦引用的资源的处理完成了,控制就返回到原来的JSP页面,处理继续进行
另外,引用能被无限深入地嵌套。这就意味着:被引用的JSP页面自己也能使用<jsp:include>标记去引用其它的资源

语法:
<jsp:include page=“local_url” flush=“true|false” />
说明:
page属性:表示其输出将要被包含进来的任何本地服务器资源,它是一个相对URL
flush属性:指出在把控制传递给引用的页面之前输出缓冲区是否被自动刷新。 flush=true表示缓冲区将自动刷新。默认值为false。记住,一旦输出缓冲区被刷新,就不能再添加和修改HTTP标题,以及控制不能再被转发给其它的页面(包括错误处理页面)


<jsp:include>行为的一个极其有用的特性是具有如下的能力:在请求的时候可以使用一个标准的JSP表达式动态设置它的page属性的值
例如:
<jsp:include page=‘<%=“greeting”+customerCode+”.jsp”%>’ />
引用的文件的名字是基于customerCode变量的,它在请求的时候被计算。如果每类用户都要求被指派一个唯一的问候语,这种设置很有用


有些时候,请求的资源要求得到一些附加的参数。例如,有一个计算帐户余额的servlet,它必须需要一个帐号才能进行计算。现在,假定一个JSP页面想 使用<jsp:include>引用这个servlet来得到帐户余额,那么这个JSP页面就必须要把一个“帐号”参数传递给servlet 才行。<jsp:include>标记本身并不能传递参数,幸运地是,使用一个叫做<jsp:param>的标记,使参数能被添 加到<jsp:include>的请求中


<jsp:include>标记引用<jsp:param>标记的语法如下:
<jsp:include page=“local_url” flush=“true|false” >
<jsp:param name=“name1” value=“value1” />
<jsp:param name=“nameN” value=“valueN” />
</jsp:include>
说明:
<jsp:param>标记的name属性表示参数的名字,value属性表示参数的值


value属性可用JSP表达式动态地赋值。例如,对前面的例子,可写如下代码:
<jsp:include page=“/servlet/AccountBalance” flush=“true” >
<jsp:param name=“Account” value=“<%=accountNum %>” />
</jsp:include>

?

<jsp:param>标记
<jsp:param>标记不能独立使用,只能包含在<jsp:include>、<jsp:forward>和<jsp:params>这3个元素中使用,用于向包含了它的元素传递参数
当<jsp:param>包含在<jsp:include> 和<jsp:forward>中时,<jsp:param>所指定的键和值将写入到被包含页面或转入页面的请求对象中,并作为请 求对象的参数与原有的参数一起发送到这些页面中(这意味着在这些页面中可从request对象中得到这些参数)

?

<jsp:include>和include指示元素的区别:
include指示元素只能引用静态文件(如HTML或JSP页面),而<jsp:include>除了引用静态文件,也引用由动态服务器资源(如servlet)产生的输出
由include指示元素引用的文件发生改变时,其变化不能自动反映到页面servlet的输出中;而<jsp:include>在请求时动态的引用服务器资源,所以页面servlet的输出随着引用文件的改变而改变

?

因为引用的文件只被处理一次而不是每次请求都处理,include指示元素比<jsp:include>要有更少的系统开销
由include指示元素引用的文件被翻译成页面servlet,在这些文件中的代码就能引用在页面servlet的_jspService()方法中定义的局部变量以及实例和类变量。使用<jsp:include>不可能做到这些
因为JSP页面是在翻译成servlet的时候而不是在请求的时候处理include指示元素,所以它不要求刷新输出缓冲区

?

2

<jsp:forward>???? <jsp:forward>???? <jsp:forward>???? <jsp:forward>???? <jsp:forward>???? <jsp:forward>


<jsp:forward>的作用是:把请求对象转发给另一个服务器资源
与<jsp:include>临时传递控制相比, <jsp:forward>永久地把控制传送给另外的资源。当控制被传送时,当前页面的执行将被终止,以及由它生成的任何输出被删除
服务器资源:一般就是JSP页面、servlet和HTML


语法:
<jsp:forward?? page=“local_url” />
说明:
page属性表示产生输出的任何本地服务器资源。它是一个相对URL,能用JSP表达式动态赋值
例:
<% String nextPage;
???????? if(user.isVendor()){
???????????? nextPage=“vendor.html”
???????? }else{ nextPage=“customer.html”}
%>
<jsp:forward?? page=“<%=nextPage %>” />

?

<jsp:forward>可以使用<jsp:param>向转向的页面传递参数。语法如下:
<jsp:forward?? page=“local_url” />
<jsp:param name=“name1” value=“value1” />
<jsp:param name=“nameN” value=“valueN” />
</jsp:forward>


因为<jsp:forward>终止当前页面的执行,所以这个动作通常是有条件调用。例如:
<% if(!user.isLogin()){ %>

<%-- 用户未登陆,转发到登陆页面 --%>
<jsp:forward page=“login.jsp” />

<% } %>

<%-- 用户已登陆,在本页面继续处理 --%>

3


<jsp:useBean>???? <jsp:useBean>???? <jsp:useBean>???? <jsp:useBean>???? <jsp:useBean>????
<jsp:useBean>?