一、
javabean
是什么?
Javabean
就是一个类,这个类就定义一系列
get<Name>
和
set<Name>
方法。
So simple
!
Javabean
就是为了和
jsp
页面传数据化简交互过程而产生的。
自己的理解:
使用
javabean
和不用
javabean
的区别:
一个
javabean
就是为
jsp
页面上的元素一一开辟一个空间,然后根据需要赋值、读值。而如果不用
javabean
,就直接使用
HttpServlet
的
request
对象:
只在
jsp
页面间传递获取数据:
String name=req.getParameter(“name”);
显示数据:
out.println(name);
存数据入
DB
:在
jsp
中直接嵌入
java
代码,用
insert
语句存入。
感觉就像当年自己毕设做的
asp
代码一样。
.asp
页面中一系列的
req.getParameter
代码和嵌入一大堆的
sql
语句,代码很乱,很难维护。
而使用
javabean
之后,优势也就是
java
的优势:组件技术,代码重用,易于维护。(在
jsp
页面中数据的显示很清晰。)
具体
javabean
是什么?有待查资料
解决:
1
)
http://www.itlearner.com/article/2004/551.shtml
软件组件就是指可以进行独立分离、易于重复使用的软件部分。
JavaBean
就是一种基于
Java
平台的软件组件思想。
2
)
http://www.chinaitpower.com/A200507/2005-07-27/170233.html
JavaBean到底是个什么东西
1.
JavaBean与EJB
(1)JavaBean与EJB规范在以下方面有共同的目标:通过标准的设计模式推广Java程序代码,提升开发过程和开发工具之间的重复运用性可携性.但是这两种规格的原始问题却是为了解决不同的问题.
定义于JavaBean组件模型中的标准规范,被设计来产生可重复运用的组件,而这些组件通常被用于IDE开发工具,而且通常是可视化组件,当然并不一定是可视化组件.
(2)EJB规范所定义的组件模弄,刚是用来开发服务端的Java程序,由于EJB可能执行在不同的服务器平台上,包括无图形的大型主机上,所以EJB无法使用类似AWT或SWING之类的图形化程序库.
2.
JavaBean与类库的区别:
(1)并不是所有有用的模块都必须转化成Bean.Bean主要是能被用来可视化操作去完成一些效果.
(2)类库是一个提供函数操作给编程者的一个有效操作,但是并不能从可视化操作中来获益.
(3)举个例子来说:提供JDBC数据库访问的API作为一个类库比作为一个bean要好,因为JDBC的核心是用一个可编程的API,并不是能够直接展现于可视化操作.然而,写一个数库库访问Bean在JDBC的顶层还是有意义的.例如,你可以写一个能定制的"Select"bean以助于用户去组成一个查询语句,并且程序运行时用JDBC去运行这个查询语句,并显示结果集.
3.
在可视化编程中,可以看出,组件是一段程序代码,通过被存为class内,关键在程序开发工具如何发现组件的属性和事件.VB和Delphi都是通过某种机制来实现这点的,而Java则通过JavaBeans将可视化组件开发带进了一个更高的境界,因为一个Bean就是一个Class.针对以上的内容,JavaBean有如下的规则:
(1)针对一个名为xxx的属性,你通常要写两个函数,getXxx()和setXxx().
(2)你可以用get/set方式来处理boolean,可以用is来代替get.
(3)Bean的一般函数不需要遵守上述的命名规则,但是需要为public.
(4)对于事件,你可以使用Swing的监听器作法来处理.
4.
JavaBean的体系结构
:
JavaBean体系结构是第一个全面的基于组件的标准模型之一.在集成的IDE中使JavaBean在设计时可以操作.组件模型见如下图:
结合所查资料得到自己的体会和总结:
(以后有问题都google和baidu,唉这个问题去年上J2EE课的时候,问了很多同学,包括苏老师,他们都没有很好的回答出来。)
1.
javabean是一种软件组件,所谓组件也就是一个java类而已。就像一个机械零件一样,可以重复的用它来组装形成产品。但是并不是每个java类都是javabean组件。软件组件是有一定的概念和体系结构的。自己的理解是,javabean组件是定义了需要get和set方法等规则的组件,通过定义这些规则,可以实现发现组件属性和事件的机制。
2.
软件组件的作用:只需编写一回,各处都可执行。
对于程序员来说,最好的一点就是
JavaBean
可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。
3.
javabean
的特点:
1.
执行
java.io.Serializable
接口
2.
提供无参数的构造器
3.
提供
get
和
set
方法访问它的属性
.
二、
javabean
的两种使用方式:(嵌入
java
代码方式和使用
jsp
标记符方式)【也就是当作普通的类来使用或者在
jsp
中
页面处理时有特殊的标记符处理方式】
以下是使用
javabean
的每个功能的两者不同方式比较:(用了
javabean
只是方便一点,并且可以实现组件重用而已。)
a
)
jsp
中使用
javabean
的类的两种方法:(这两行代码的作用是一样的)
法一:
jsp
中使用
<jsp:useBean>
标记符访问
javabean
:
<jsp:useBean id="test" class="test.TestBean" />
法二:
jsp
中嵌入
java
代码方式访问
javabean
:
首行导入
javabean
:
<%@ page import="com.javaBean.TestBean" %>
下边就可以像在
java
语言中那样用了:
<% TestBean testBean=new TestBean(); %>
b)jsp
页面之间传递和获取数据的两种方法:
l
获取数据:
法一:使用属性标记符:
<jsp:getProperty name="test" property="message" />
法二:直接嵌入
java
代码:(更简单)
<%=testBean.getName()%>
l
存数据:
法一:使用属性标记符:
设置单个元素值:
<jsp:setProperty name="test" property="name" value="jcm" />
设置
jsp
页面中所有元素的值:
<jsp:setProperty name="test" property="*" />
注:这个方法特别方便,只需要在接收数据并负责显示的
jsp
页面使用
<jsp:useBean>
之后加上这一行代码,所有数据就自动赋值了。然后在接下来的
jsp
代码中就可以使用
get
方法显示出数据了。
法二:直接嵌入
java
代码:
<%
String name=req.getParameter(“name”);
testBean.setName(name)
String pwd=req.getParameter(“password”);
testBean.setName(pwd)
%>
注:
通常
javabean
函数中除了
get
和
set
方法外,还有一个把数据存入
DB
中的方法(也就是和
DB
连接并实现
insert
语句)。
问题:
1.
一个
javabean
当作一个普通的类来使用,(
import
类,通过
new
方法构造一个对象,然后通过对象调用方法),和通过
jsp
标记符
<jsp:useBean>
来使用有区别吗?它和普通的类有什么区别呢?
javabean
也可以通过普通类的使用方式来访问呀。上面总结的内容就是这样的呀。
2.
是不是只有通过标记符
<jsp:useBean>
来使用才能真正体检
javabean
组件的优势:自动赋值?如果不使用标记符
<jsp:useBean>
可以实现自动赋值吗?
有待实验解决。
解决:(终于明白过来了!)
参考资料:
http://www.faq-it.org/archives/jsp/52ae59e6bc6d13af9ee621213347274a.php
关于
javaBean
原理性的两个问题
作者
:bdsc
初次接触
javaBean
,遇到了两个原理性的问题,没有找到确定的资料得到答案,希望在这儿能得到大家的帮助。
1
、
javaBean
的
class
与普通
java
的
class
有什么区别?
javaBean
的类代码有没有明确的规定,比如一定要继承什么类?如没有那怎么说一个
java
的
class
是
javaBean
,或不是呢?
2
、
javaBean
是在客户端执行还是在服务器执行呢?
2.1
如果在客户端执行,那是不是在客户端一定要有
jvm
,并且要下载对应的
javaBean
的
class
文件?但我怎么没有在自己的系统盘中找不到相应
javaBean
的
class
文件呢?那
applet
也是在客户端运行,为什么要出现
javaBean
呢?
2.2
如果在服务器执行,那
javaBean
是在客户端生成用户界面而产生的,那服
务器端执行的代码怎么在客户端生成用户界面呢?
---------------------------------------------------------------
1
、对于
javaBean
于普通
java
的
class
类的分别并非很明确
,主要是
javabean
通常在
jsp
页面上有特殊的引用方法。
2
、
javabean
是在服务器端执行的。
javabean
并不直接生成用户界面(那是
applet
做的事情),而通常只做数据的组织、处理工作。然后通过
jsp
页面来生成用户的界面。
以上只是我个人的理解。我也希望与大家一起讨论。
---------------------------------------------------------------
javaBean
是一种(符合要求的)
java
类
*.jsp
在服务器端编译运行,通过封装的
socket
(你看到的是
outputStream/
名字也许不正确
一类的对象)向客户(
webbrowser __ie/navigator)
发送普通字符流(按
http
协议
),
这个字符流由浏览器接受,解释然后按一定的格式显示
---------------------------------------------------------------
1
、
javaBean
的
class
与普通
java
的
class
有什么区别?
javaBean
的类代码有没有明确的规定,比如一定要继承什么类?如没有那怎么说一个
java
的
class
是
javaBean
,或不是呢?
javaBean
其实就是一个
JAVA
程序。可以在
JSP
里面调用。
ENterprise JavaBean
是用于构建企业应用的
EJB
。必须在应用服务器上面部署。
2
、
javaBean
是在客户端执行还是在服务器执行呢?
javaBean
是在服务器执行,返回给客户端的只是
HTML
代码。
如果要在客户端执行,可以用
APPLET
---------------------------------------------------------------
sun
很早提出的
javabean
的概念是解决可视的
application
的模块化提出来的,但由于
java
在客户端开发实在不怎么样,所以
sun
没有在这方面再进行,作为界面模块化开发的
javabean
实际上已经死了。(以上纯粹个人观点,欢迎批评)
但是随着
web
应用的兴起
jsp
的出现,
jsp
需要这样的概念,功能
/
表现分开,将功能封装在一个模块中,以便实现最大化的代码复用,就又拾起这个
javabean
将它用在
web/jsp
开发上。
你提到的那篇文章所说的是可视化的
javabean
用在
applet
里的情况
,以后你可以在心理分清楚(因为也许没人这样看)别人说的是那种
javabean
。
至于具体符合什么要求,说实话我不知道(因为我个人不赞成用
javabean
的)
自己的总结:
1. javaBean
是一种(符合要求的)
java
类。
javaBean
与普通
java
的
class
类的分别并非很明确,主要是
javabean
通常在
jsp
页面上有特殊的引用方法。
2.
所以
javabean
既可以当作普通的类来使用,也可以在
jsp
页面上有特殊的引用方法。
3.
对于第三个问题:是不是只有通过标记符
<jsp:useBean>
来使用才能真正体检
javabean
组件的优势:自动赋值?如果不使用标记符
<jsp:useBean>
可以实现自动赋值吗?
答:不是的。
Jsp
的自动赋值是指:通过
<jsp:setProperty name=”myBean” property=”*” />
这个属性访问标记符就可以轻松实现对
jsp
页面上所有参数的赋值,方便一点,而如果用普通类的访问方式,需要一一获取各项值,一一调用
set
方法而已。比如:
<%
StuInfoBean stuInfoBean=new StuInfoBean();
String stuNo=request.getParameter("stuNo");
String stuName=request.getParameter("stuName");
stuInfoBean.setStuNo(stuNo);
stuInfoBean.setStuName(stuName);
%>
4.
所以
javabean
只是一个符合必须有
set
和
get
方法,并且可以在
jsp
上有特殊引用方式的
java
类。
二、
一个例子,分别使用
jsp
特殊引用方式和普通类的使用方式来实现对
javabean
的调用:
主要的区别在于两个地方:
1
)
对类的使用:
l
jsp
标记符方式:使用
<jsp:useBean />
l
普通类方式:
<%@ page import="com.javaBean.StuInfoBean" %>
2
)
对属性的赋值:
l
jsp
标记符方式:
<jsp:setProperty name="stuInfoBean" property="*" />
l
普通类方式:
<%
StuInfoBean stuInfoBean=new StuInfoBean();
String stuNo=request.getParameter("stuNo");
String stuName=request.getParameter("stuName");
stuInfoBean.setStuNo(stuNo);
stuInfoBean.setStuName(stuName);
%>
具体代码如下:
1.
使用
jsp
特殊引用方式(
StuInfo.jsp
)
:
<%
@ page contentType
=
"
text/html;charset=GBK
"
%>
<
html
>
<
head
>
<
title
>
I use javabean individually
</
title
>
</
head
>
<
jsp:useBean id
=
"
stuInfoBean
"
scope
=
"
session
"
class
=
"
com.javaBean.StuInfoBean
"
/>
<
jsp:setProperty name
=
"
stuInfoBean
"
property
=
"
*
"
/>
![](/Images/OutliningIndicators/None.gif)
<
body
>
<
center
>
<
form name
=
"
myForm
"
action
=
"
test.jsp
"
>
<
table
>
<
tr
>
<
td
>
stuNo is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<
input type
=
"
text
"
size
=
20
name
=
"
stuNo
"
value
=
""
>
</
td
>
</
tr
>
<
tr
>
<
td
>
stuName is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<
input type
=
"
text
"
size
=
20
name
=
"
stuName
"
value
=
""
>
</
td
>
</
tr
>
<
tr
>
<
td
>
<
input type
=
"
submit
"
value
=
"
显示
"
>
</
td
>
</
tr
>
</
table
>
</
form
>
<
hr
>
<
table
>
<
tr
>
<
td
>
stuNo is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<%=
stuInfoBean.getStuNo()
%>
</
td
>
</
tr
>
<
tr
>
<
td
>
stuName is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<%=
stuInfoBean.getStuName()
%>
</
td
>
</
tr
>
</
table
>
</
center
>
</
body
>
</
html
>
2.
普通类的使用方式(
StuInfo.jsp
)
:
<%
@ page contentType
=
"
text/html;charset=GBK
"
%>
<%
@ page
import
=
"
com.javaBean.StuInfoBean
"
%>
<
html
>
<
head
>
<
title
>
I use javabean individually
</
title
>
</
head
>
<
body
>
<
center
>
<%
StuInfoBean stuInfoBean
=
new
StuInfoBean();
![](/Images/OutliningIndicators/None.gif)
String stuNo
=
request.getParameter(
"
stuNo
"
);
![](/Images/OutliningIndicators/None.gif)
String stuName
=
request.getParameter(
"
stuName
"
);
![](/Images/OutliningIndicators/None.gif)
stuInfoBean.setStuNo(stuNo);
![](/Images/OutliningIndicators/None.gif)
stuInfoBean.setStuName(stuName);
![](/Images/OutliningIndicators/None.gif)
%>
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
<
form name
=
"
myForm
"
action
=
"
StuInfo.jsp
"
>
<
table
>
<
tr
>
<
td
>
stuNo is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<
input type
=
"
text
"
size
=
20
name
=
"
stuNo
"
value
=
""
>
</
td
>
</
tr
>
<
tr
>
<
td
>
stuName is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<
input type
=
"
text
"
size
=
20
name
=
"
stuName
"
value
=
""
>
</
td
>
</
tr
>
<
tr
>
<
td
>
<
input type
=
"
submit
"
value
=
"
显示
"
>
</
td
>
</
tr
>
</
table
>
</
form
>
![](/Images/OutliningIndicators/None.gif)
<
hr
>
<
table
>
<
tr
>
<
td
>
stuNo is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<%=
stuInfoBean.getStuNo()
%>
</
td
>
</
tr
>
<
tr
>
<
td
>
stuName is:
![](/Images/OutliningIndicators/None.gif)
</
td
>
<
td
>
<%=
stuInfoBean.getStuName()
%>
</
td
>
</
tr
>
<
table
>
</
center
>
</
body
>
</
html
>
3.
运行效果: