javaBean是java web开发中的组件技术。一个JavaBean就是一个java类。主要有两种:(1)带有可视化界面的类,如button,combo等(2)没有可视化界面的类,javaweb用的是后者。
JavaBean完成的工作主要是业务逻辑和数据处理逻辑,这样将显示逻辑和java程序逻辑分开来,减少jsp中的java代码量,而将大量的java代码封装到JavaBean组件中,在jsp页面只要简单的调用JavaBean即可,如用jsp:useBean动作标签。
JavaBean的编写规则:
(1)应该为一个public类
(2)如果属性名字xxx,则getXxx()为得到属性值,setXxx()为设置属性值。
<jsp:getProperty>标签得到属性的值,实质上是调用JavaBean的get方法。
例如:
useBean.jsp
<%@ page language='java' contentType='text/html;charset=gb2312'
pageEncoding='gb2312'%>
<html>
<head>
<title>使用useBean动作指令</title>
</head>
<body>
可视化bean
package visibableBean;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.BeanInfo;
import java.beans.EventSetDescriptor;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
//可视化bean
public class Bean extends JFrame {
private JTextField text=new JTextField(20);
private JTextArea results=new JTextArea(); //文本域
public void print(String s){
results.append(s+"\n");
}
public void use(Class bean){
results.setText("");
BeanInfo bi=null;
try{
bi=Introspector.getBeanInfo(bean, Object.class);
}catch(IntrospectionException e){
print("Couldn't introspect"+bean.getName());
return;
}
PropertyDescriptor[]properties=bi.getPropertyDescriptors(); //所有属性数组
for(int i=0;i<properties.length;i++){
Class p=properties[i].getPropertyType(); //属性的类型,返回为Class对象
if(p==null)continue;
print("属性类型: "+p.getName()+"\n属性名称: "+properties[i].getName());
Method readMethod=properties[i].getReadMethod();
if(readMethod!=null)
print("getXXX() 方法: "+readMethod);
Method writeMethod=properties[i].getWriteMethod();
if(writeMethod!=null)
print("setXXX() 方法: "+writeMethod);
}
print("===============");
print("所有公共方法:");
MethodDescriptor[] methods=bi.getMethodDescriptors();
for(int i=0;i<methods.length;i++){
print(methods[i].getMethod().toString());
}
print("===============");
print("Event support");
EventSetDescriptor[] events=bi.getEventSetDescriptors();
for(int i=0;i<events.length;i++){
print("监听类型:"+events[i].getListenerType().getName());
Method[]lm=events[i].getListenerMethods();
for(int j=0;j<lm.length;j++)
print("监听方法: "+lm[j].getName());
MethodDescriptor []lmd=events[i].getListenerMethodDescriptors();
//for(int j=0;j<lmd.length;j++)
//print("M")
Method addListener=events[i].getAddListenerMethod();
print("添加监听方法: "+addListener);
Method removeListener=events[i].getRemoveListenerMethod();
print("删除监听方法: "+removeListener);
}
}
public Bean(){
Container cp=getContentPane();
JPanel p=new JPanel();
p.setLayout(new FlowLayout());
p.add(new JLabel("请输入JavaBean名称"));
p.add(text);
cp.add(BorderLayout.NORTH,p);
cp.add(new JScrollPane(results));
text.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
String name=text.getText();
Class c=null;
try{
c=Class.forName(name);
}catch(ClassNotFoundException ex){
ex.getMessage();
return;
}
use(c);
}
}); //文本框添加响应事件
text.setText("com.wsy.visalJavaBean");
}
public static void main(String[] args) {
new Bean().setSize(500,300);
new Bean().setVisible(true);
}
}
package com.wsy;
import java.awt.event.ActionListener;
public class visalJavaBean {
private int color;
private int background;
private int active;
public int getActive() {
return active;
}
public void setActive(int active) {
this.active = active;
}
public int getBackground() {
return background;
}
public void setBackground(int background) {
this.background = background;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public void addActionListener(ActionListener l){
}
public void removeActionListener(ActionListener l){
}
}
执行结果:
全部源码见附件