`

jsp行为元素

    博客分类:
  • J2EE
阅读更多

行为元素

行为元素的作用:与指示元素不同,行为元素是与特定的请求相关的。它通过使用、修改或创建对象来影响服务器的输出流
行为元素可分为两种:
标准行为元素:由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>     <jsp:useBean>     <jsp:useBean>     <jsp:useBean>     <jsp:useBean>    
<jsp:useBean>     <jsp:useBean>     <jsp:useBean>     <jsp:useBean>     <jsp:useBean>    
<jsp:useBean>     <jsp:useBean>     <jsp:useBean>     <jsp:useBean>     <jsp:useBean>    


为了提高维护性和可重用性,JSP提供了和JavaBean紧密集成的行为元素
因为JavaBean是封装行为和数据的离散的组件,是独立于应用程序的,所以它们易于维护和重用
关于JavaBean:
JavaBean是标准的Java类,它遵循在JavaBean规范中描述的命名和设计约定

 

JavaBean的属性是private的,通过getXxx()/setXxx()方法来访问
通过getXxx()和setXxx()方法适当的组合, JavaBean属性能被设置为只读、只写和读写
如果JavaBean既可读又可写,setter方法的参数类型必须和同一个属性的getter方法的返回值类型一致。这是因为JSP容器使用属性的getter方法的返回值来确定调用哪一个setter方法
JavaBean必须有一个无参的构造函数

<jsp:useBean>加载一个指定的bean,并赋给它一个逻辑名,通过这个逻辑名在JSP页面中引用它
加载一个bean的过程涉及对它的实例化和把bean放到一个指定的作用域中,或者是从一个指定的作用域中查找存在的bean。因此,只有在指定的作用域 中不存在指定id的bean的情况下,<jsp:useBean>才会初始化一个新的bean(即先查找,如果未找到,就实例化一个新的)

 

<jsp:useBean>的基本语法如下:
<jsp:useBean id=“bean_name” class=“package.Class” />
id属性:bean对象的名字
class属性:bean类的名字(要求含有包名)
示例:如下的<jsp:useBean>实例化com.inside.Employee类的一个实例,并命名为employee存储在page作用域中(注意,如果scope属性未指定,默认是page作用域):
<jsp:useBean id=“employee” class=“com.inside.Employee” />


上面的例子实际上相当于下面的脚本片断:
<% Employee employee=new Employee();    %>
对id属性的命名限制:
在同一个JSP页面中必须是唯一的。也就是说,在同一页面上的两个<jsp:useBean>不能使用相同的id
区分大小写
必须以字母开始,只能包含字母、数字和下划线

 

<jsp:useBean>的高级语法如下:
<jsp:useBean id=“bean_name” class=“package.Class”   scope=“scope”/>
初始化代码
</jsp:useBean>
说明:
该语法允许用户指定bean的作用域以及引用初始化代码。初始化代码仅仅当bean被第一次初始化的时候执行一次


例如,如下的<jsp:useBean>以shoppingCart名字实例化一个com.inside.Cart对象,并指定了 session作用域(也就是shoppingCart对象被存储在用户的会话对象中)。然后通过设置Cart对象的maxItems属性,对Cart对 象进行初始化
<jsp:useBean   id=“shoppingCart” class=“com.inside.Cart”   scope=“session” />
<jsp:setProperty   name=“shoppingCart” property=“maxItems”    value=“10”   />
</jsp:useBean>


<jsp:useBean>还能使用beanName属性代替class属性,来指定一个bean类或一个串行化的文件(.ser文件)。如果beanName指定一个串行化的文件,bean对象就从串行化的文件中重新实例化,并以指定的名字和作用域存储
最后,<jsp:useBean>也支持type属性。这个属性指定以什么样的类型来检索bean。有时,这是有用的。例如,如果一个bean实现了一个特定的接口,你可以选择作为一个接口的实例来检索bean,而不通过bean类的实例来检索bean:

 

假设前面实例化的shoppingCart对象实现了一个Shoppable接口,如下的<jsp:useBean>就从 session作用域中检索shoppingCart对象,找到后就将shoppingCart对象强制转化成Shoppable接口类型:
<jsp:useBean   id=“shoppingCart” class=“com.inside.Cart”   scope=“session”   type=“com.inside.Shoppable”/>
这样的shoppingCart对象将只支持Shoppable接口定义的方法

 


4

<jsp:getProperty>     <jsp:getProperty>     <jsp:getProperty>     <jsp:getProperty>     <jsp:getProperty>     <jsp:getProperty>    
<jsp:getProperty>     <jsp:getProperty>     <jsp:getProperty>     <jsp:getProperty>     <jsp:getProperty>    

<jsp:getProperty>用来获得bean的属性值,并把它插入到JSP页面中。这个行为在JSP页面中产生可见的输出。如果必要的话,这个值在插入JSP页面之前会自动被转化为字符串
语法
<jsp:getProperty name=“bean_name” property=“property” />
说明
name属性:其值等于<jsp:useBean>的id属性的值
property属性:bean的属性的名字


如下的<jsp:getProperty>用来获得employee bean的salary属性的值:
<jsp:getProperty name=“employee” property=“salary” />
它与下面的脚本片断是等价的:
<% employee.getSalary();   %>
对于boolean属性,其返回值是一个“true”或“false”字符串。当请求一个boolean属性时,JSP容器首先寻找一个isXxx()方法,如果未找到,再使用getXxx()方法,如果还未找到,就抛出一个异常


动态设置HTML标记中的属性的值是<jsp:getProperty>一个特别有用的功能
getproperty.jsp示范了一个显示HTML表单的JSP页面,表单的值自动由<jsp:getProperty>来产生。该页面使用了名为EmployeeBean.java的JavaBean类,在这个类中应使用package语句


<jsp:setProperty>     8-1<jsp:setProperty>     8-1<jsp:setProperty>     8-1<jsp:setProperty>     8-1<jsp:setProperty>     8-1

 

<jsp:setProperty>用来设置一个bean的属性的值。它不产生可见的输出
最基本的语法
<jsp:setProperty name=“bean_name”   property=“property_name” value=“value”>
说明:
name属性:其值等于<jsp:useBean>的id属性的值
property:要设置的bean的属性的名字
value:赋给指定属性的值(它会屏蔽掉请求中同名的参数

例如,如下的<jsp:setProperty>设置employee bean的gradeLevel的属性值为10
<jsp:setProperty name=“employee”   property=“gradeLevel” value=“10”>
它等价于下面的脚本片断:
<%   employee. setGradeLevel(10) %>
问题:在EmployeeBean中,setGradeLevel()方法的参数类型是一个整数,而<jsp:setProperty>中的 赋值却是一个字符串,类型不对。幸运地是,JSP容器必要时会自动地把字符串转换为适当的参数类型。相似的,JSP容器自动转换任何非字符串返回值为一个 字符串


如何用请求中的参数来设置bean的属性的值?使用param属性。 param属性指定请求对象中参数的名字,它的值用来设置指定的bean属性。 param属性用于代替value属性
语法
<jsp:setProperty name=“bean_name”   property=“property_name” param=“request_param_name”>
例如:
<jsp:setProperty name=“employee”   property=“salary” param=“empSalary”>
注意:如果在param属性中指定的请求对象中的参数不存在,就没有动作发生。即,不调用bean属性的setXxx()方法

 

使用param属性可以大大简化把请求参数与bean属性关联的过程。然而,还有一个更快的方法--如果每个请求参数的名字和bean属性的名字完 全一样(包括大小写),就可以用一个单个的<jsp:setProperty>标记来代替多 个<jsp:setProperty>标记,在这个单个的<jsp:setProperty>标记中,用“*”通配符表示 property属性。“*”指示每个请求参数应该与相同名字的bean属性关联在一起。这种类型的<jsp:setProperty>语 法:
<jsp:setProperty name=“bean_name”   property=“*”>


动态属性值动态属性值动态属性值动态属性值
动态属性值 动态属性值 动态属性值      动态属性值     动态属性值


大多数JSP标记的属性不支持动态地赋值,但某些JSP行为标记的某些属性支持:


JSP行为标记 支持动态赋值的属性
<jsp:include> page
<jsp:forward> Page
<jsp:useBean> beanName
<jsp:setProperty> value
<jsp:param> value

 

其它行为元素    
其它行为元素    
其它行为元素    


<jsp:plugin>用来指示在客户端下载JvavBean或applet小程序。语法如下:
<jsp:plugin type=“bean|applet” code=“applet_Class_name” code_base=“applet_directory” height=“height” width=“width” />
示例:
<jsp:plugin type=“applet” code=“SampleApplet.class” code_base=“/applets” height=“200” width=“200” />

 


在<jsp:plugin>中,可以使用<jsp:params>和<jsp:param>向applet传递参数。示例:
<jsp:plugin type=“applet” code=“StockTicker.class” code_base=“/applets” height=“200” width=“200” >
<jsp:params>
<jsp:param name=“stock1” value=“sunw”>
<jsp:param name=“stock1” value=“ibm”>
<jsp:param name=“stock1” value=“nov1”>
</jsp:params>
</jsp:plugin>

 

在<jsp:plugin>中,可以使用<jsp:fallback>向客户端返回出错信息。示例:
<jsp:plugin type=“applet” code=“StockTicker.class” code_base=“/applets” height=“200” width=“200” >
<jsp:fallback>
这个股票applet不能运行在你的浏览器上
</jsp:fallback>
</jsp:plugin>


<jsp:attribute>主要用于设置元素的属性。它不能独立使用
语法:
<jsp:attribute name=“attributeName” trim=“true|false” >
attributeValue
</jsp:attribute>
说明:
name属性:要设置值的属性名
trim属性:当trim=true时,将忽略标记体中的空格、回车、换行和制表符等符号

 

<jsp:attribute>的一种用法是在标记体中设置其它行为元素的属性。例如:
<mytag:highlight>
<jsp:attribute name=“text”>
Inline definition
</jsp:attribute>
</mytag:highlight>
在该例子中,<jsp:attribute>指定了<mytag:highlight>中的一个属性text,并将它的值设置为“Inline definition”。如果标记体为空,则text=“”

 

我们知道,在设置行为元素的属性时,都是在开始标记的属性列表中进行设置的,那么在标记体中采用<jsp:attribute>给属性 赋值有什么好处吗?---好处就是可以在运行的时候动态地改变属性值。在开始标记的属性列表中设置属性时,属性值只会被运算一次,然后就直接赋值给属性。 <jsp:attribute>位于标记体,每次执行都会被运算

 

<jsp:attribute>的另一种用法是用在<jsp:element>的标记体中,这时<jsp:attribute>将用于指定输出的XML标记的属性和值。例如:
<jsp:element name=“firstname”>
<jsp:attribute name=“name”>Susan</jsp:attribute>
</jsp:element>
这段代码将产生如下输出:
<firstname name=“Susan”>
注意:这种情况下的<jsp:attribute>不是用来指定<jsp:element>元素的属性


<jsp:body>用来显示地声明元素的标记体。它不能独立使用,只能包含在其它标记中
语法:
<jsp:body>
body_content
</jsp:body>
说明:
该标记用的最多的情况是在使用<jsp:attribute>时


<jsp:element>用于动态地定义一个XML元素。它有两种语法形式
XML元素没有属性时的语法形式:
<jsp:element   name=“xml_name”>
Optional body
</jsp:element>
XML元素有属性时的语法形式:
<jsp:element   name=“xml_name”>
<jsp:attribute>…</jsp:attribute >(可有多个)
<jsp:body>…</jsp:body>(只能有一个)
</jsp:element>
name属性指定了将要生成的XML元素的名称

 

<jsp:text>用来包含模板数据。在使用上,它与直接使用模板数据没什么区别,但不能在其中出现别的元素。语法:
<jsp:text>
optional body
</jsp:text>
示例:
<jsp:text>
这是一些注释:${foo.content}
</jsp:text>


<jsp:out>用于修改输出的某些属性,只能用于XML语法形式的JSP文档和标记文件中
语法:
<jsp:out   omit-xml-declaration=“true|yes|false|no”/>
omit-xml-declaration属性用于指定是否在输出中忽略XML声明。当为true或yes时,将忽略XML声明

 

<jsp:root>、<jsp:declaration>、<jsp:scriplet>和<jsp:expression>的作用是:以标准的XML形式来取代传统JSP语法。它们都用在JSP文档中
<jsp:root>:JSP文档的根元素
<jsp:declaration>:取代传统JSP声明
<jsp:scriplet>:取代传统JSP脚本片断
<jsp:expression>:取代传统JSP表达式


<jsp:invoke>与<jsp:dobody>
这两个标记只能用在标记文件中

分享到:
评论

相关推荐

    servlet和jsp学习指南

    《Servlet和JSP学习指南》是系统学习Servlet和JSP的必读之作。...第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet3中的两项新特性;第18章介绍Struts 2的用法。

    JSP中include指令和include行为的区别

     jsp:include page=” ” flush=”true”/&gt; 前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。 通常当应用程序中所有的...

    Servle和JSP学习指南

    本书是系统学习Servlet和JSP的必读之作。由全球知名的Java技术专家(《How ...第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的两项新特性;第18章介绍Struts 2的用法。

    servlet和jsp学习指南_pdf.rar

    《servlet和jsp学习指南》是系统学习servlet和jsp的必读之作。...第16章讨论servlet/jsp应用程序的部署过程,以及部署描述符中的元素;第17章阐述servlet 3中的两项新特性;第18章介绍struts 2的用法。

    《JSP技术大全》pdg格式

    此书从JSP的基本语法开始,到其他WEB组件,函盖了JSP元素,JSP行为以及众多深入的内容。其中涉及到的内容包括PAGE伪指令,JSP扩展标签等内容。深入后的内容有会话API,数据库元素的JDBC的简介,还有XML的内容。书上...

    Servlet和Jsp学习指南(带详细书签)

    《servlet和jsp学习指南》是系统学习servlet和jsp的必读之作。...第16章讨论servlet/jsp应用程序的部署过程,以及部署描述符中的元素;第17章阐述servlet 3中的两项新特性;第18章介绍struts 2的用法

    JSP WEB 开发实践

    JSP 页面的元素 taglib指令 JSP中include指令和include行为区别

    servlet和jsp学习指南pdf

    本书共18章:第1章介绍Servlet API和几个简单的Servlet;第2章讨论Session追踪...第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的两项新特性;第18章介绍Struts 2的用法。

    Servle和JSP学习指南,完整扫描版

    【添加了封面和目录,真正完整版】 本书是系统学习Servlet和JSP的必读之作。...第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的两项新特性;第18章介绍Struts 2的用法。

    java资料--jsp技术大全(pdg)

    涉及到jsp许多东西,web编程环境,jsp元素,jsp行为,jsp 和其他组件。感觉不错分享一下!不容过。。。。。

    Servlet和jsp学习指南

    本书是系统学习Servlet和JSP的必读之作。由全球知名的Java技术专家(《How ...第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的两项新特性;第18章介绍Struts 2的用法。

    JSP中的include有几种形式?都有什么区别?

    (1)前者是指示元素,后者是行为元素 (2)前者合成一个页面,后者合成一个文件后被JSP容器转化成Servlet 您可能感兴趣的文章:springMVC几种页面跳转方式小结JSP中include指令和include行为的区别springMVC使用jsp...

    servet&jsp;学习指南

    本书共18章:第1章介绍Servlet API和几个简单的Servlet;第2章讨论Session追踪...第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的两项新特性;第18章介绍Struts 2的用法。

    JSP学习笔记之基础语法

    jsp页面元素构成 jsp页面组成部分有:指令,注释,静态内容,表达式,小脚本,声明。 jsp指令 page指令:通常位于jsp页面的顶端,同一个页面可以有多个page指令 include指令:将一个外部文件嵌入到当前jsp文件中,...

    用web.xml控制Web应用的行为

    用web.xml控制Web应用的行为 目录 1 定义头和根元素 2 2 部署描述符文件内的元素次序 2 3 分配名称和定制的UL 3 3.1 分配名称 3 3.2 定义定制的URL 5 3.3 命名JSP页面 6 4 禁止激活器...

    WEB开发完全手册

    CSS 长度单位参考 其他参考 &lt;br&gt;命令标识符 缺省行为参考 htc 行为参考 可视化滤镜和切换参考 HTML+TIME参考 网页矢量图形标记语言 HTML 应用程序 技巧 语言代码 ...

    WEB完全手册

    CSS 长度单位参考 其他参考 &lt;br&gt;命令标识符 缺省行为参考 htc 行为参考 可视化滤镜和切换参考 HTML+TIME参考 网页矢量图形标记语言 HTML 应用程序 技巧 语言代码 ...

    Dreamweaver教程

    您可以 查看所有站点元素或资源并将它们从易于使用的面板直接拖到文档中。您可以在 Macromedia Fireworks 或其他图形应用程序中创建和编辑图像,然后将它们直接导入 Dreamweaver,或者 添加 Macromedia ...

    软件工程-6.实现implementation

    第 6 章 实现IMPLEMENTATION ...6.2.2 实施设计元素 6.2.3 复审代码 6.2.4 分析运行时行为 6.2.5 开发人员测试 6.2.6 子系统集成 6.2.7 系统集成 6.2.8 记录服务实现决策 6.3 JSP代码实现案例 。。。

Global site tag (gtag.js) - Google Analytics