3JSP与Javabean
按着Sun公司的定义,Javabean是一个可重复使用的软件组件。实际上Javabean是一种Java类,通过封装属性和方法成为一种具有某种功能或处理某个业务的对象,简称bean。
一个基本的JSP页面由普通的HTML标记和Java程序片组成。如果大量的程序片和HTML大量掺杂在一起,就显得页面混杂,不易维护。JSP页面应当将数据的处理过程指派给一个或几个bean来完成,只需在JSP页面中调用bean即可。
1编写Javabean
Javabean分为可视组件和非可视组件。在JSP中主要是使用非可视组件。对于非可视组件,不必去设计它的外观,主要关心它的属性和方法。
编写Javabean就是编写一个Java的类,所以只要学会写类就能编写一个Javabean,这个类创建的一个对象称为一个Javabean,简称bean。为了能让使用这个bean的应用程序构建工具知道这个bean的属性和方法,只需在类的方法命名上遵守以下规则:
如果类的成员变量名字是xxx,那么为了获取或更改成员变量的值,即获取或更改属性,类中必须提供两个方法:
getXxx(),用来获取属性xxx。
setXxx(),用来修改属性xxx。
也就是方法的名字用get或set为前缀,后缀是将成员变量名字的首字母大写的字符序列。
对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用is代替上面的get和set。
类中声明的方法的访问属性都必须是public的。
类中声明的构造方法必须是public、无参数的。
创建bean的类必须带有包名,使用package语句给类起一个包名。如:package tom.jiafei
那么为了能够让Tomcat服务器能找到字节码,字节码文件必须保存在特定的目录中。在当前web服务目录下建立子目录结构:\WEB-INF\classes然后在classes下建立如下子目录结构tom\jiafei,然后将编译好的字节码文件放入其中。为了让Tomcat服务器启用上述WEB-INF\classes必须重新启动Tomcat服务器。
2创建与使用bean
在使用bean的JSP页面中,首先必须有相应的import指令,如:
<%@ page import="tom.jiafei.*" %>
然后在JSP页面中再使用JSP动作标记useBean,来加载使用bean。useBean标记的语法格式:
<jsp:useBean id="bean的名字" class="创建beans的字节码" scope="bean有效范围"/>
或
<jsp:useBean id="bean的名字" class="创建beans的类" scope="bean有效范围">
</jsp>
例:
<jsp:useBean id="circle" class="tom.jiafei.circle" scope="page"/>
需要注意,其中的"创建beans的类"要带有包名。
useBean标签中scope取值的不同情况:
scope取值为page
JSP引擎分配给每个JSP页面的bean互补相同。就是说,尽管每个JSP页面的bean的功能相同,但它们占有不同的内存空间。该bean的有效范围是当前页面,当客户离开这个页面,JSP引擎取消分配的bean,即释放bean所占有的内存空间。
注意不同用户的scope取值是page的bean也是不相同的,一个用户对自己bean的属性的改变,不会影响到另一个用户。
scope取值session
此时bean的有效范围是客户的会话期间。就是说,如果客户在某个Web服务目录多个页面中相互连接,每个页面都含有一个useBean标签,而且各个页面的useBean标签中ID的值相同、scope的值都是session,那么客户在这些页面得到的bean是相同的一个(占有相同的内存空间)。如果客户在某个页面更改了这个bean的属性,其他页面的这个bean的属性也将发生同样的变化。
注意,不同用户的scope取值是session的bean是互不相同的,当两个客户同时访问一个JSP页面时,一个用户对自己的bean的属性的改变,不会影响到另一个用户。
scope取值request
此时bean的有效范围是request期间。客户在网站的访问的期间可能请求过多个页面,如果这些页面含有scope取值是request的useBean标签,那么每个页面分配的bean也是互不相同的,JSP引擎对请求响应之后,取消分配给JSP页面的这个bean。
注意,不同用户的scope取值是request的bean是互不相同的,当两个客户同时请求一个JSP页面时,一个用户对自己bean的属性的改变,不会影响到另一个用户。
scope取值application
JSP引擎为Web服务目录下的所有的JSP页面分配一个共享的bean,不同用户的scope取值是application的bean也都是相同的一个。当多个客户同时访问一个JSP页面时,任何一个用户对自己bean的属性的改变,都会影响到其他用户。
3获取和修改bean的属性
获取或修改bean的属性还可以使用动作标记getProperty、setProperty。bean就是一个遵守一定规范的类做创建的对象,当JSP页面使用getProperty、setProperty标记获取或修改属性xxx时,必须保证bean有相应的getXxx和setXxx方法。
getProperty动作标记
使用该标记之前必须使用usBean动作标记获得相应的bean。getProperty动作标记的语法格式:
<jsp:getProperty name="bean的名字" property="bean的属性"/>
或
<jsp:getProperty name="bean的名字" property="bean的属性"/>
</jsp:getProperty>
setProperty动作标记
使用该标记之前,必须使用useBean标记得到一个可操作的bean。setProperty动作标记的语法格式:
<jsp:setProperty name="bean的名字" property="bean的属性" value="<%=expression%>"/>
或
<jsp:setProperty name="bean的名字" property="bean的属性" value=字符串/>
如果将表达式的值设置为bean属性的值,表达式的类型必须和bean的属性的类型一致。如果将字符串设置为bean的属性值,这个字符串会自动被转化为bean的属性的类型。
通过HTTP表单的参数来设置bean的相应属性的值
如果需要明确bean的某个属性设置为表单中的对应的参数值。需如下使用setProperty标记:
<jsp:setProperty name="bean的名字" property="属性名" param="参数名"/>
属性名和参数名相同,参数名就是表单中某个元素的名字,属性名就是bean的某个属性的名字。
<jsp:setProperty name="bean的名字" property="*"/>
改标记不同具指定beans属性的值将对应表单中哪个参数指定的值,系统会自动根据名字进行相应的匹配。
注意,当使用HTTP表单设置bean的属性值时,只有提交了表单,该标记才会被执行。
4解决“软件包 javax.servlet 不存在”错误的方法:
1. 搜索servlet-api.jar
所在文件夹:C:\Tomcat 5.5\common\lib
2. 将环境变量CLASSPATH的值设置为:
.;C:\Tomcat 5.5\common\lib\servlet-api.jar
3.原来除了设置classpath以及servlet-api.jar的区别外,还有一点!!!
把COMMON/LIB下的SERVLET-API.JAR 拷贝到JDK\jre\lib\ext下
附加:
JavaBeans的属性
JavaBeans的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是同一个概念,在程序中具体体现就是类中的变量。JavaBeans的设计中,按照属性的不同作用细分为4类:Simple属性、Index属性、Bound属性与Constrained属性。
Simple属性
一个Simple类型的属性表示一个伴随有一对getXXX()、setXXX()方法的变量。属性的名称和该属性相关的getXXX()、setXXX()方法相对应。
Indexed属性
一个Indexed类型的JavaBeans属性表示一个数组值。使用与该属性相对应的setXXX()和getXXX()放可以存取数组中某个元素的数值。同时,我们也可以使用另两个同名方法一次设置或取得整个数组的值(即属性的值)。
public class JavaBean2
{
int[] dataSet={1,2,3,4,5,6};
public void JavaBean2(){
}
public void setDataSet(int[] x){
dataSet=x;
}
public void setDataSet(int index,int x){
dataSet[index]=x;
}
public int[] getDataSet(){
return dataSet;
}
public int getDataSet(int x){
return dataSet[x];
}}
Bound属性
一个Bound类型的JavaBean组件的属性具有这样的特性:当该中属性的值发生变化,必须通知其它JavaBeans组件的对象,每次JavaBeans组件对象的属性值改变时,这种属性就引发一个PropertyChange事件(在java程序中,事件也被看作是一个对象)。这个事件中封装了发生属性改变事件的属性名、属性的原值、属性变化后的新值。这个事件将被传递到其它的JavaBeans组件中,至于接受事件的JavaBean组件对象应该作什么动作由其自己定义。
import java.beans.*;
public class JavaBean3{
String ourString="Hello";
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
public void setString(String newString){
String oldString=ourString;
ourString=newString;
changes.firePropertyChange("ourString",oldString,newString);
}
public String getString(){
return ourString;
}
public void addPropertyChangeListener(PropertyChangeListener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}}
PropertyChangeSupport类型的对象changes主要用于向监听者对象发送信息(当JavaBean对象已经发生了属性改变的事件)。changes对象的firePropertyChange()方法,通知监听者队列的所有事件监听对象。
Contrained属性
JavaBeans组件的Constrained类型的属性具有这样的性质:当这个属性的值将要发生变化但还没有发生变化的时候,与这个属性已经机那里了某种监听关系的其它Java对象可以否决属性值的改变。此Constrained类型的属性的事件监听者对象将会通过抛出PropertyVetoException异常事件来阻止该属性值的改变。
import java.beans.*;
public class JavaBean4{
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
private VetoableChangeSupport vetos=new VetoableChangeSupport(this);
int outPriceInCents;
public void setPriceInCents(int newPriceInCents)throws PropertyVetoException{
int oldPriceInCents=ourPriceInCents;
vetos.fireVetoableChange("priceInCents",new Integer(oldPriceInCents),new Integer(newPriceInCents));
ourPriceInCents=newPriceInCents;
changes.firePropertyChange("priceInCents",new Integer(oldPriceInCents),new Integer(newPriceInCents));
}
public void addVetoableChangeListener(VetoableChangeListener l){
vetos.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l){
vetos.removeVetoableChangeListener(l);
}
public void addPropertyChangeListener(PropertyChangeListener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}}
VetoableChangeSupport类型的对象vetos主要用于通知事件否决对象,某个JavaBean对象的属性值将要发生变化,让它们投票决定是否允许这个事件的发生。
3JSP与Javabean相关推荐
- java遍历bean_javaweb利用javabean将数据库中内容遍历在页面输出
效果如下图 它所实现的就是把数据库中一个表中所有的数据一条一条以表格的形式输出在网页上, 实现方法如下 首先我们要从数据库读取数据,这里要借助javabean来方便我们传递数据 以上面的为例,我要输出 ...
- java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码
jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...
- JSP+Servlet+JavaBean
JSP相当于在HTML页面中加上Java代码,一般在<body>标签中放入主要代码. 在JSP里用<%...%>把Java代码包含起来的. Servlet的生命周期: ①被服务 ...
- POJO、JavaBean、DAO
POJO POJO全称是Plain Ordinary Java Object / Plain Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方 ...
- JavaBean简单及使用
一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用 ...
- JavaBean规范
2019独角兽企业重金招聘Python工程师标准>>> (1)JavaBean 类必须是一个公共类,并将其访问属性设置为 public (2)JavaBean 类必须有一个空的构造函 ...
- JavaBean与表单处理
6.1 非MVC模式(Model1) 6.1.1 单纯的JSP页面编程 定义:在单纯的JSP编程模式下,通过应用JSP中的脚本标志,可直接在JSP页面中实现各种功能. 优点:逻辑简单,容易理解 缺点: ...
- 什么是JavaBean
按着Sun公司的定义,JavaBean是一个可重复使用的软件组件.实际上JavaBean是一种Java类,通过封装属性和方法成为具有某种功能或者处理某个业务的对象,简称bean.由于javabean是 ...
- 创建节约内存的JavaBean
点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 来源:http://u6.gg/swLPg 编写Java代码的时候,大多数情况下,我们很少关注一 ...
最新文章
- CTFshow 命令执行 web77
- 第十七章 Python网络编程
- 使用qrcode类制作二维码
- Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程
- 一文带你读懂Self-Supervised Learning(自监督学习)
- python插件使用教程_Python插件机制实现详解
- 使用Notepad++正则提取数据,然后进行替换
- centos7安装samba遇到的问题
- 实现C++与C的混合编程
- Java 浅析内部类
- win10无线断开无法连接服务器,简单几步解决win10wifi一直断开连接不上的问题
- 微信支付解决多商户平台收款
- RDL 报表 - 查询条件使用下拉框
- “钢铁大王”卡耐基:一步一个脚印的职场人
- 关于一个CUE文件及多个分轨APE合并成CUE及APE文件的办法
- 如何使用计算机蓝色,电脑中如何用Word的红绿蓝三原色配出天蓝色?
- SPP: Spatial Pyramid Pooling
- 计算机程序的灵魂,如何理解算法是程序设计的灵魂
- iOS-app store 的应用下架,这个下架的应用名称 多久后才可以使用?
- POJ 3095 Linear Pachinko 字符串模拟