JavaWeb复习——task04:JavaBean 动作标签和作用域
作者:互联网
Aims:
掌握Javabean动作标签和生命周期。Introduction:
Javabean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 Javabean API 规范。
接下来给出的是 Javabean 与其它 Java 类相比而言独一无二的特征:
- 提供一个默认的无参构造器。
- 需要被序列化并且实现了 Serializable 接口。
- 可能有一系列可读写属性。
- 可能有一系列的 getter 或 setter 方法。
Part 1:
Javabean 的属性和动作标签
1. Javabean 的属性:
1、 Javabean的属性可以是任意类型,并且一个Javabean可以有多个属性。每个属性通常都需要具有相应的setter、getter方法,setter方法称为属性改造器,getter方法称为属性访问器。
2、 属性改造器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如:name属性的改造器名称为setName,password属性的改造器名称为setPassword。
3、 属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如:name属性的访问器名称为getName,password属性的访问器名称为getPassword。
4、一个Javabean的某个属性也可以只有set方法或get方法,这样的属性通常也称为只写、只读属性。
2. JSP技术提供了三个关于Javabean 组件的动作标签,即JSP标签,它们分别为:
< jsp:useBean >标签: 用于在JSP页面中查找或实例化一个Javabean组件
< jsp:setProperty >标签: 用于在JSP页面中设置一个Javabean组件的属性
< jsp:getProperty >标签: 用于在JSP页面中获取一个Javabean组件的属性
< jsp:useBean >标签:
< jsp:useBean >标签用于在指定的域范围(page、request、session、application)内查找指定名称的Javabean对象:翻译到servlet中。
注意:
如果存在则直接返回该Javabean对象的引用。
如果不存在则实例化一个新的Javabean对象并将它以指定的名称存储到指定的域范围中。
< jsp:sertProperty >标签
< jsp:setProperty >标签用于设置和访问Javabean对象的属性。
< jsp:getProperty >标签
< jsp:getProperty >标签用于读取Javabean对象的属性,也就是调用Javabean对象的getter方法,然后将读取的属性值转换为字符串后插入进输出的响应正文中。
Part 2:
Javabean 的作用域
Javabean 的生命周期存在于 4 种范围中,分别为 page、request、session 和 application,它们通过 < jsp:useBean > 标签的 scope 属性进行设置。
这四种范围虽然存在很大区别,但它们与 JSP 页面中的 page、request、session 和 application 范围相对应。
1. page 范围:与 JSP 的 request 生命周期相对应,Javabean的生命周期存在于request对象之中,当 request 对象销毁时 Javabean 也被销毁。
2. request 范围:与 JSP 的 request 生命周期相对应,Javabean 的生命周期存在于 request 对象之中,当 request 对象销毁时 Javabean 也被销毁。
3. session 范围:与 JSP 的 session 生命周期相对应,Javabean 的生命周期存在于 session会话之中,当session超时或会话结束时 Javabean 被销毁。
4. application 范围:与 JSP 的 application 生命周期相对应,在各个用户与服务器之间共享,只有当服务器关闭时 Javabean 才被销毁。
这四种作用范围与 Javabean 的生命周期是息息相关的,当 Javabean 被创建后,通过 < jsp:setProperty > 标签与 < jsp:getProperty > 标签调用时,将会按照 page、request、session 和 application 的顺序来查找这个 Javabean 实例,直至找到一个实例对象为止,如果在这四个范围内都找不到 Javabean 实例,则抛出异常。
实例:通过一个简单的计数器 Javabean 对 session 与 application 范围进行比较,其中计数器的 Javabean 对象为 Counter 类。
Counter.java 代码如下:
package com.Lee;
public class Counter {
private int count;//访问数量
public int getCount() {
return ++count;
}
}
创建计数器对象后,在 index.jsp 页面分别创建 session 与 application 范围内的实例对象。
index.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>计数器</title>
</head>
<body>
<!-- 创建一个session范围的 Counter 对象 -->
<jsp:useBean id="counter_session" class="com.Lee.Counter" scope="session"/>
<!-- 创建一个application范围的 Counter 对象 -->
<jsp:useBean id="counter_application" class="com.Lee.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>
</html>
此页面分别输出了 session 范围与 application 范围的计数器的数值,刷新页面后其数值不断自增,如下图:
这说明了 Counter 对象实例存在于此次会话之中。
当开启一个新的浏览器窗口时,session 的生命周期结束,与之对应的 Counter 对象也将被销毁,但 application 范围中的 Counter 对象依然存在,如下图:
Conclusions:
Model1 (JSP+Javabean) 与 Model(JSP+Servlet+Javabean) 是JSP开发Web应用程序的两种架构模式。Model1 开发模式比较适合小型项目的开发,但由于其自身缺陷,不能达到一种理想的设计状态,通常采用 Model2 模式遵循 MVC 设计理念进行实际开发。在这两种开发构架模式中,都离不开 Javabean 组件的使用!
标签:JavaWeb,作用域,标签,session,jsp,JSP,task04,Javabean,属性 来源: https://blog.csdn.net/weixin_44715733/article/details/112167244