1)JavaBean是什么?
JavaBean是遵循某些简单的约定而编写的Java类,JavaBean并没有扩展特殊的类,也不在特殊的包中,同时也没有使用特殊的接口。
# JavaBean类必须拥有一个零参数的(默认)构造函数
通常我们都不会在JavaBean中定义带参数的构造函数,好像也用不到。所以我们一般都使用默认的构造参数,当然你可以显示的定义一个无参数的构造参数。
# JavaBean类不应该有公开的实例变量(字段)
其实这个要求是在面向对象的设计中的一个重要的设计原则,当然如果你使用public的也是可以用的,但是很可能在使用中出现很多问题。
# 持续性的值应该通过getXxx(有时isXxx方法,但是使用getXxx也可)和setXxx方法来访问
通过相应的set和get方法我们就能设置和获取相应的参数的值,如果无法设置和获取相应的值,那JavaBean要来何用。
2)JavaBean组件的优点
# 不需要用到Java语法
使用JavaBean可以很容易操作Java对象,而不需要使用很多Java语法的具体细节,促进了内容和表达式之间的分离。对于我们的开发非常有帮助。
# 对象的共享更简单
相比使用等同功能的显示Java代码,使用JavaBean构造时,对象在多个页面或请求见的共享要容易的多。
# 请求参数与对象属性之间可以方便地对应起来
JavaBean极大的简化了读取请求参数,对字符串进行适当的转换,并将结果放入到对象中的过程。
3)如何在Jsp中操作一个JavaBean
# jsp:useBean
<jsp:useBean id="beanName" class="package.class" />
我们还可以提供scope属性。jsp:useBean 既可以构建新的JavaBean,也可以访问现存的JavaBean。
# jsp:getProperty
<jsp:getProperty property="PropertyName" name="beanName" />
这个元素读取或输出JavaBean的属性值,即调用了getXxx方法的简单写法。
# jsp:setProperty
<jsp:setProperty property="PropertyName" name="beanName" value="PropertyValue" />
这个元素修改JavaBean的属性值,即调用了setXxx方法的简单写法。
4)一个简单的JavaBean实例
访问结果:
***在使用jsp:setProperty时,value中的值可以是一个表达式,比如value="<%= session.getAttribute("username") %>"***
5) 共享JavaBean
上文也提到了设置scope属性,通过设置scope属性,JavaBean的使用范围也不同。使用scope时,系统首先检查指定的位置是否存在指定名称的JavaBean,仅当系统找不到现有的JavaBean时,才会创建新的JavaBean。
# <jsp:useBean ... scope="page" />
page也是默认值。page的作用域表示:在处理当前请求时,除了要将JavaBean对象绑定到局部变量外,还应该将他放在PageContext中。将对象存储在此处表示,servlet可以通过调用预定义变量pageContext的getAttribute方法来访问它。由于每个页面和每个请求都有不同的pageContext对象,所以scope=“page”(或省略)表示不共享JavaBean,也就是针对每一个请求都创建新的JavaBean。
# <jsp:useBean ... scope="request" />
request表示:在处理当前请求时,除了要将JavaBean对象绑定到局部变量外,还应该将他放在HttpServletRequest对象中,从而可以通过getAttribute方法来访问它。在使用jsp:include,jsp:forward或者RequestDispatcher的include或forward方法时,两个Jsp页面或Jsp页面与servlet将会共享请求对象。
# <jsp:useBean ... scope="session" />
session表示:在处理当前请求时,除了要将JavaBean对象绑定到局部变量外,还应该将他放在HttpSession对象中。可以通过getAttribute方法来获取存储在HttpSession中的对象。
# <jsp:useBean ... scope="application" />
application表示:在处理当前请求时,除了要将JavaBean对象绑定到局部变量外,还应该将他放在ServletContext中。在ServletContext中将由整个web应用中的jsp和servlet所共享。可以通过getAttribute方法来获取存储在ServletContext中的对象。