JavaBean笔记。

来源:互联网 发布:电脑端怎么看手机淘宝 编辑:程序博客网 时间:2024/05/17 09:11
一。JavaBean是一种可重复使用的且跨平台的软件组织。

JavaBean可分为两种:一种是有用户界面的JavaBean,还有一种是没有用户界面,主要负责表示业务数据或者处理事务的JavaBean。
JSP通常访问的是后一种JavaBean。


二。JSP和JavaBean搭配使用,有三个好处。

1.使得HTML和Java程序分离,便于维护。
2.可以降低开发JSP网页人员的Java编程能力。
3.JSP侧重于生成动态网页,事务处理由JavaBean来完成,这样可以利用JavaBean组件的可重用性特点,提高开发网站的效率。


三。一个标准的JavaBean有以下几个特性。

1.JavaBean是一个公共的类。
2.JavaBean有一个不带参数的构方法。
3.JavaBean通过set方法设置属性,通过get方法获取属性。
4.属性名和get方法名之间存在固定的对应关系:如果属性名为“count”,那么get方法名为“getCount”,属性名中的第一个字母在方法名中改为大写。
5.属性名和set方法名之间存在固定的对应关系:如果属性名为“count”,那么get方法名为“setCount”,属性名中的第一个字母在方法名中改为大写。
6.如果希望JavaBean能被持久化,那么可以使它实现java.io.Serializable接口。

以下是一个JavaBean,类的名字为CounterBean。

package mypackage;

public class CounterBean {
    private int count = 0;

    public CounterBean() {}

    public int getCount() {
         return count;
    }

    public void setCount(int count) {
         this.count = count;
    }
}


其中定义了一个count属性,用来统计数字。有一个不带参数的构造方法,一个getCount和setCount方法。


四。JSP访问JavaBean。

1.首先导入JavaBena这个类。

<%@ page import="mypackage.CounterBean" %>

导入这个JavaBean类。

2.声明JavaBean对象。

<jsp:useBean id="counterBean" class="mypackage.CounterBean" scope="session" />

id:代表JavaBean对象的ID,实际上表示引用JavaBean对象的局部变量名,以及存放在特定范围内的属性名。JSP规范要求存放在所有范围内的每个JavaBean对象都有唯一的ID。
class:用来指定JavaBean的雷鸣。
scope:指定JavaBean对象的存放范围,可选值为page、request、session、application。

执行这段代码时,
1》定义一个名为counterBean的局部变量。
2》尝试从scope指定的会话范围内读取名为“counterBean”的属性,并且使得counterBean局部变量的引用具体属性值,即CounterBean对象。
3》如果在scope指定的会话范围内,名为“counterBean”属性不存在,会通过CounterBean类的默认构造方法创建一个CounterBean对象,并把它存放在会话范围内,令其属性名为“counterBean”,并且counter局部变量也引用这个CounterBean对象。

所以以上的<jsp:useBean>和以下Java代码作用等价:

mypackage.CounterBean counterBean = null;
counterBean = (mypackage.CounterBean) session.getAttribute("counterBean");
if(counterBean == null) {
     counterBean = new mypackage.CounterBean();
     session.setAttribute("counterBean",counterBean);
}

3.访问JavaBean属性。

1》get。

<jsp:getProperty name="counterBean" property="count" />

格式固定,name是上边声明的id,也就是此时需要使用的对象名字,property是你想要得到类中的属性名(这里类中就只有count,但是类中可以存放多个属性名,只要设置get和set方法就好),这里的代码相当于JSP中的:

<%=counterBean.getCount()%>

2》set。


<jsp:setProperty name="counterBean" property="count" value="2" />

相当于JSP中的:

<%counterBean.setCounter(2)%>

注意:必须先声明才能访问,否则抛出异常。


五。JavaBean的范围。

scope属性决定了JavaBean对象存在的范围,可选值包括以下几种。

page:表示页面范围,它是scope属性的默认值。

request:表示请求范围,从客户端想服务器发出请求到服务器返回响应这一阶段。

session:表示会话范围,从浏览器第一次访问一个Web应用中的支持会话的任意一个网页开始,Servlet容器创建HttpSession对象,到会话结束。会话结束指的是:会话过期、浏览器终止、服务器调用HttpSession对象的invalidate()方法等。

application:表示Web应用范围,该范围就是Web应用开启到终止的范围。

例子:
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="mypackage.CounterBean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

    <jsp:useBean id="counterBean" class="mypackage.CounterBean" scope="page" />
    <jsp:setProperty name="counterBean" property="count" value="<%=counterBean.getCount() + 1%>" /> 
    <jsp:forward page="forward.jsp" />
</body>
</html>

forward.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="mypackage.CounterBean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <jsp:useBean id="counterBean" class="mypackage.CounterBean" scope="page" />
    <jsp:getProperty name="counterBean" property="count" />
</body>
</html>

如果scope设置为page:
打开index界面,虽然在index中通过value设置为count+1,然是,然后请求转发给forward界面,发现无论打开刷新多少次都是输出0,这是因为在index对象创建的counterBean对象只在index界面内有效。

如果scope设置为request:
打开index界面,发现每次刷新数值都是1,因为request请求index,然后index将请求转发到forward界面,此时执行完forward界面返回响应,请求结束。

如果scope设置为session:
打开index,发现每次刷新数值都会加1,但是打开另一个浏览器却会从1重新开始。

如果scope设置为application:
打开index,刷新每次数值都会加1,,然后再打开另一个浏览器数值会接着上一个浏览器的数值增加。

注意:每次forward.jsp都会从对应的scope范围中获取属性,如果是request、session、application,那么对应的Java代码应该如下:

CounterBean obj = (CounterBean) request.getAttribute("counterBean");
CounterBean obj = (CounterBean) session.getAttribute("counterBean");
CounterBean obj = (CounterBean) application.getAttribute("counterBean");


总的来说,JavaBean对象的生存范围从大到小排列为:application>session>request>page。
0 0
原创粉丝点击