在JSP开发过程中有两张开发模型可供选择:
- JSP与JavaBean相结合,这种方式称为Model1
- JSP,JavaBean与Servlet相结合,这种方式称为Model2
JavaBean简介
JavaBean是用于封装某种业务逻辑或对象的Java类,此类具有特定的功能,即它是一个可重用的Java软件组件模型。由于这些组建模型都具有特定的功能,将其进行合理的组织后,可以快速生成一个全新的程序,实现代码的重用。JavaBean的功能是没有任何限制的,对于任何可以使用Java代码实现的部分或需求的对象,都可以使用JavaBean进行封装。
JavaBean分为可视化JavaBean和不可视化JavaBean,主要采用非可视化JavaBean。
在JSP中,可以通过JSP提供的动态标签来操作JavaBean对象。常用如下:
- <jsp:useBean> 用于在JSP页面中创建一个JavaBean的实例,并通过属性的设置将此实例存放到JSP指定的范围内。
- <jsp:setPorperty>用于对JavaBean属性进行赋值,与<jsp:useBean>配合使用,但要求该属性提供set方法。
- <jsp:getProperty>用于获取JavaBean中的属性值,但要求该属性必须有相对应的get方法
<jsp:useBean>
语法格式:
<jsp:useBean id="变量名"
scope="page|request|session}application"
{ class="完整类名|type="数据类型"|class="完整类名”type="数据类型"|BeanName="完整类名" type="数据类型"}
/>
scope设置JavaBean作用域,默认为page。
class属性与BeanName属性不同时存在。{}内为选择内容
用法:创建JavaBean后,在.jsp页面中加入
<jsp:useBean id="自定义实例化的变量名" class="com.jsoft.JavaBean类名></jsp:useBean>
<jsp:setPorperty>
语法格式如下:
<jsp:setPorperty
name="实例名"
{
property = "*" | property = "属性名" | property = "属性名" param = "参数名" | property = "属性名" value = "值"}/>
实例名=<jsp:useBean>标签中的id设置的变量名。property属性取值有两种:"*"和JavaBean的属性名称
用法:在
<jsp:useBean id="自定义实例化的变量名" class="com.jsoft.JavaBean类名/>创建完实例化对象之后,对该实例化对象的属性进行赋值。
<jsp:useBean id="user" class="com.jsoft.User"/>
<jsp:setProperty name="user" property="username" value="zoe"/>
同时可以通过<%=user.getUsername()%>来显示该属性的值。
<jsp:getProperty>
语法格式如下:
<jsp:getProperty name="实例名" property="属性名"/>
<jsp:useBean id="user" class="com.jsoft.User"/>
<jsp:setProperty name="user" property="username" value="zoe"/>
<jsp:getProperty name="user" property="username"/>可输出username的值
JavaBean的作用域
- page范围:与当前页面相对应,JavaBean的生命周期存在一个页面中,当页面关闭时,JavaBean被注销。
- request:与JSP的request对象生命周期相对应,当request对象销毁时JavaBean被销毁。
- session:与JSP的session对象生命周期相对应,当session对象销毁时JavaBean被销毁。
- application:与JSP的application对象生命周期相对应,在各个用户与服务器之间共享,当服务器关闭时JavaBean被销毁。
例:JavaBean在session范围内与application范围的比较
package com.jsoft.util;
public class Counter {
private int count=0;//访问数量
public int getCount(){
return ++count;
}
}
<body>
<jsp:useBean id="counter_session" class="com.jsoft.util.Counter" scope="session"/>
<jsp:useBean id="counter_application" class="com.jsoft.util.Counter" scope="application"/>
<table align="center" width="350" border="1">
<tr>
<td colspan="2" align="center"><br><h1>JavaBean</h1></td>
</tr>
<tr>
<td align="right" width="30%">session</td>
<td ><jsp:getProperty property="count" name="counter_session"/></td>
</tr>
<tr>
<td align="right">application</td>
<td ><jsp:getProperty property="count" name="counter_application"/></td>
</tr>
</table>
</body>
运行结果:刷新页面值不断增加。开启一个新的浏览器窗口时,session生命周期结束与之对应的
Counter对象销毁
,而application范围中的Counter对象仍然存在。