jsp与javabean

发布时间:2009-7-29浏览:

核心提示:jsp与javabean

1 在JSP中使用JavaBean教学目标 
了解JavaBean的概念 
了解JavaBean的规范 
了解JavaBean的四种属性 
JSP与JavaBean搭配使用的优点 
掌握JSP访问JavaBean的语法 
理解JavaBean的四种范围 

 


 
2 JavaBean的概念JavaBean是一种描述用Java语言来实现的软件组件模型,实际上就是按照一组原则而设计的常规Java类。(类似MicroSoft 的COM组件概念) 
软件组件模型描述如何建立和重复利用软件组件来有效地构造一个应用程序。(即“软件的IC”模型,通过组装方式构建应用程序) 
 
3 JavaBean的规范JavaBean规范中将bean总结为支持以下特征的类: 
自省(introspection) 
定制 (customization) 
属性 (property) 
事件(event) 
持久化(persistence) 
 
4 自省(introspection) 
5 定制 (customization) 
6 属性 (property) 
7 事件(event) 
8 持久化(persistence) 
9 JavaBean的原则 
10 JavaBean的原则通过遵循这些规范和原则,开发工具可以了解到你要如何使用bean以及它如何连接到其它的bean或其它的类。 
例如:<jsp:getProperty>和<jsp:setProperty>标准动作能够发现bean的所有属性。 
 
11 JavaBean的可见性分类 
12 JSP中的JavaBean 
13 JavaBean的属性 
14 JSP与JavaBean搭配使用的优点使得HTML与Java程序分离,这样便于维护代码。如果把所有的程序代码都写到JSP网页中,会使得代码繁杂,难以维护 
可以降低开发JSP网页人员对Java编程能力的要求 
JSP侧重于生成动态网页,事务处理由JavaBean来完成,这样可以充分利用JavaBean组件的可重用性特点,提高开发网站的效率 


 
15 CounterBean类public class CounterBean{ 
private int count=0; 
public CounterBean(){} 
public int getCount(){ 
return count; 
    } 
public void setCount(int count){ 
this.count=count; 
    } 


 
16 JSP访问JavaBean的语法1.导入JavaBean类 
2 .声明JavaBean对象 
3 .访问JavaBean属性 

 

 
17 导入JavaBean类通过<%@ page import>指令导入JavaBean类,例如: 
   <%@ page import="mypack.CounterBean" %> 


 
18 声明JavaBean对象<jsp:useBean>标签用来声明JavaBean对象,例如: 
<jsp:useBean id="myBean" 
        class="mypack.CounterBean" scope="session" /> 


<jsp:useBean id="myBean_1" 
       class="mypack.CounterBean" scope="session" /> 
 
19 访问JavaBean属性  JSP提供了访问JavaBean属性的标签,如果要将JavaBean的某个属性输出到网页上,可以用<jsp:getProperty>标签,例如: 


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


如果要给JavaBean的某个属性赋值,可以用<jsp:setProperty>标签,例如: 


<jsp:setProperty name="myBean" property="count" value="0" /> 
 
20 JavaBean的范围scope属性决定了JavaBean对象存在的范围。scope的可选值包括: 
page(默认值) 
request 
session 
application 
 
21 JavaBean在page范围内客户每次请求访问JSP页面时,都会创建一个JavaBean对象。JavaBean对象的有效范围是客户请求访问的当前JSP网页。JavaBean对象在以下两种情况下都会结束生命期: 
客户请求访问的当前JSP网页通过<forward>标记将请求转发到另一个文件 
客户请求访问的当前JSP页面执行完毕并向客户端发回响应。 


 
22 JavaBean在request范围内客户每次请求访问JSP页面时,都会创建新的JavaBean对象。JavaBean对象的有效范围为: 
客户请求访问的当前JSP网页 
和当前JSP网页共享同一个客户请求的网页,即当前JSP网页中<%@ include>指令以及<forward>标记包含的其他JSP文件 
当所有共享同一个客户请求的JSP页面执行完毕并向客户端发回响应时,JavaBean对象结束生命周期。 
 
23 JavaBean在request范围内 JavaBean对象作为属性保存在HttpRequest对象中,属性名为JavaBean的id,属性值为JavaBean对象,因此也可以通过HttpRequest.getAttribute()方法取得JavaBean对象,例如: 


CounterBean obj=(CounterBean)request.getAttribute(“myBean”); 
 
24 JavaBean在session范围内JavaBean对象被创建后,它存在于整个Session的生存周期内,同一个Session中的JSP文件共享这个JavaBean对象。 
 
25 JavaBean在session范围内JavaBean对象作为属性保存在HttpSession对象中,属性名为JavaBean的id,属性值为JavaBean对象。除了可以通过JavaBean的id直接引用JavaBean对象外,也可以通过HttpSession.getAttribute()方法取得JavaBean对象,例如: 


CounterBean obj=(CounterBean)session.getAttribute(“myBean”); 
 
26 JavaBean在application范围内JavaBean对象被创建后,它存在于整个Web应用的生命周期内,Web应用中的所有JSP文件都能共享同一个JavaBean对象。 
 
27 JavaBean在application范围内JavaBean对象作为属性保存在application对象中,属性名为JavaBean的id,属性值为JavaBean对象,除了可以通过JavaBean的id直接引用JavaBean对象外,也可以通过application.getAttribute()方法取得JavaBean对象,例如: 


CounterBean obj= 
                    (CounterBean)application.getAttribute("myBean"); 
 
28 练习题问题: 
<jsp:useBean id="myBean" 
class="mypack.CounterBean" scope=“application" /> 
 如何输出myBean的count属性? 
选项(A) 
<jsp:getProperty name="myBean" property="count" /> 
 
29 练习题<jsp:useBean id="myBean" 
class="mypack.CounterBean" scope=“application" /> 


选项(B) 
<% CounterBean counterBean=(CounterBean)application.getAttribute(“myBean”); 
%> 
<%=counterBean.getCount()%> 
 
30 练习题<jsp:useBean id="myBean" 
class="mypack.CounterBean" scope=“application" /> 


选项(C) 
<% CounterBean counterBean=application.getAttribute(“myBean”); 
%> 
<%=counterBean.getCount()%> 


 
31 练习题问题:mypack.CounterBean应该发布到你的web应用(myweb)的什么目录下? 
选项: 
(A) / myweb 
(B) / myweb /WEB-INF/ 
(C) / myweb /WEB-INF/classes 
(D) / myweb /WEB-INF/classes/mypack 
答案: 
 
32 练习题问题:在JSP页面中通过<jsp:useBean>标记来访问JavaBean,而不是通过<% …%>程序代码来访问JavaBean,有什么好处? 


 
33 练习题问题:为什么JavaBean必须遵守特定的规范,比如对于CounterBean的count属性,必须提供getCount()和setCount()方法,而不能随心所欲的定义为getCOunt()、insertcount()等等其他名字? 

 

 
34 关联(bound)属性当属性变化时,另外的对象可能希望被通知发生了这个变化,并且对变化做出反应。 
包含关联属性的Bean必须定义addPropertyChangeListener()和    removePropertyChangeListener()方法 
    增加和删除PropertyChangeListener对象,以便提供监听器注册服务。 
Java.beans包中的PropertyChangeSupport类实现了增加和删除PropertyChangeListener对象的方法 
希望被通知的对象(监听者)需要实现PropertyChangeListener接口及其propertyChange方法 ,并被添加到实现了关联属性的Bean中 
PropertyChangeEvent 类封装了属性变化信息。通过propertyChange方法,它从属性变化事件来源被发送到每一属性变化监听者列表中的对象 
 
35 实现关联(bound)属性步骤遵循下面的步骤在Bean中实现关联属性支持: 
import java.beans包,提供了PropertyChangeSupport类 
实例化PropertyChangeSupport对象: 
     private PropertyChangeSupport changes = new              PropertyChangeSupport(this); 
  该对象保持属性变化监听者列表,当属性点火属性变化事件 
实现保持属性变化监听者列表的方法。因PropertyChangeSupport实现了这些方法,只需要将调用PropertyChangeSupport对象的方法打包: 
          public void addPropertyChangeListener(PropertyChangeListener l) { 
         changes.addPropertyChangeListener(l);  } 
          public void removePropertyChangeListener(PropertyChangeListener l){ 
        changes.removePropertyChangeListener(l);} 
 
36 实现关联(bound)属性步骤 (续)当属性被改变时,修改一种属性的setter方法点火属性变化事件。假设CustomBean有一个名为color的颜色属性,它的setColor ( )方法看起来象这样: 
     public void setColor(Color newColor){ 
         Color oldColor = color; 
         color = newColor; 
         changes.firePropertyChange("color",oldColor, newColor); 
          /*一旦属性变化,上述方法将把它的传入参数包含在PropertyChangeEvent对象中,在每一个注册了的监听者上调用propertyChange(PropertyChangeEvent pce)方法 */ 
         repaint();} 
 
37 关联(bound)属性示例遵循下面的步骤实现关联属性的监听: 
import java.beans包,提供PropertyChangeListener接口 
定义属性变化监听者类,实现PropertyChangeListener接口 
         class BeanListener extends Panel 
                  implements PropertyChangeListener 
实现propertyChange方法,对CustomBean发来的属性事件进行处理 
             public void propertyChange(PropertyChangeEvent evt){ 
               //从属性变化事件得到变化了的属性名称 
               String propertyName=evt.getPropertyName(); 
               //如果是颜色属性变化了 
               if(propertyName.equalsIgnoreCase("color")){...} 
             } 
 
38 关联(bound)属性示例 (续)定义属性变化监听者bl 
     BeanListener bl = new BeanListener(iniColor); 
将属性变化监听者bl加入到cBean的属性变化监听者列表上 
   cBean.addPropertyChangeListener(bl); 
使属性变化,CBean会继而发出属性变化事件给监听者 
      public void mousePressed(MouseEvent e) { 
      if(e.getSource()==b){ 
      //这里CBean会继而发出属性变化事件给监听者 
                cBean.setColor(Color.red); 
        }} 
 
39 受限(Constrained)属性受限属性的值要发生变化时,与该属性建立了某种连接的其它Java对象可否决属性值的改变 
监听者通过抛出PropertyVetoException异常来阻止该属性值的改变 
为了实现受限的属性 ,需要: 
包含一种或更多受限属性的来源Bean 
VetoableChangeSupport类实现了下述方法:能把VetoableChangeListener对象增加到监听者列表或者从上面删除;当属性变化被提议时,向列表中每一的监听者发出属性变化事件;捕捉任何否决,并再次发送属性变化事件,带着原来的属性值 
实现VetoableChangeListener接口的监听者对象。该对象接受或者否决来源Bean中的受限属性提议的变化 
一个PropertyChangeEvent对象,包含属性名称,和属性的旧和新的值。该类也用于关联属性 
 
40 实现受限(Constrained)属性步骤遵循下面的步骤,将赋予Bean受限属性: 
Import java.beans包,提供VetoableChangeSupport类 
在Bean内实例化一个VetoableChangeSupport对象 : 
      private VetoableChangeSupport vetos = new VetoableChangeSupport(this); 
实现方法,维持属性变化监听者列表 
     public void addVetoableChangeListener ( VetoableChangeListener l ){ 
         vetos.addVetoableChangeListener ( l ); 
         } 
     public void removeVetoableChangeListener ( VetoableChangeListener l ){ 
          vetos.removeVetoableChangeListener ( l ); 
      } 
 
41 实现受限(Constrained)属性步骤(续)当属性被改变时,通过属性的setter方法发出属性变化事件。这包括给setter方法增加throws语句 
      public void setColor(Color newColor) throws   PropertyVetoException{ 
     Color oldColor = color; 
     /*首先把变化告诉有否决权的监听者,如果有监听者反对,我们不捕捉异常,而是将它传递给调用者*/ 
    vetos.fireVetoableChange("color",oldColor, newColor); 
   //如果没有否决发生,变化会继续下去 
   color = newColor; 
   //重绘画面,反映color属性的变化 
  repaint();} 
 
42 实现受限(Constrained)属性监听步骤实现受限属性监听的步骤如下: 
Import java.beans包,提供VetoableChangeListener接口 
         class BeanListener extends Panel 
                  implements VetoableChangeListener 
实现VetoableChangeListener接口的vetoableChange方法,根据具体情况,对属性的变化接收或者否决 
      public void vetoableChange(PropertyChangeEvent evt) 
                    throws PropertyVetoException{ 
      //获得属性名称 
              String propertyName=evt.getPropertyName(); 
      if(propertyName.equalsIgnoreCase("color")){…} 
 } 
 
43 实现受限(Constrained)属性监听步骤(续)建立一个有否决权的属性事件监听者bl 
      BeanListener bl = new BeanListener(iniColor); 
将bl添加到cBean的属性变化监听者列表中 
      cBean.addVetoableChangeListener(bl); 
使属性变化,CBean会继而发出属性变化事件给监听者 
      public void mousePressed(MouseEvent e) { 
/*如果对属性的设置新值被否决,那么就会收到PropertyVetoException异常,将该代码块置于try-catch块中*/ 
try{ 
          if(e.getSource()==b){ 
          //这里CBean会继而发出属性变化事件给监听者 
                cBean.setColor(Color.red); 
     } 
       }catch(Exception except){} 
    } 
 


日志标题:innerobject&jsp
发表时间:2005-11-21 19:37:00

1 JSP中内置(内建/隐含)对象教学目标 
了解内置对象的分类 
掌握主要的内置对象 
request,response,out,session, 
application,pageContext 


 
2 内置对象的概述JSP为简化页面的开发提供了一些内置对象.这些内置对象不需要我们创建,由web容器实现和管理.所有的JSP页面中都能使用这些内置对象并且只有在表达式和Scrilet中使用,在声明中不能使用. 
 
3 内置对象的概述与Input / Output 有关的隐含对象:out、request 和response对象 
与Context 有关的隐含对象:session、application、pageContext对象 
与Error 有关的隐含对象:exception 对象 
与Servlet 有关的隐含对象:page 和config 
 
4 与Input / Output 有关的隐含对象request 对象表示客户端请求的内容; 
response 对象表示响应客户端的结果; 
而out 对象负责把数据的结果显示到客户端的浏览器。 
 
5 与Context 有关的隐含对象session对象提供一些机制,让服务器能个别辨认用户。 
当程序在执行时,application对象能提供服务端(Server-Side)的Context,说明哪些资源是可利用的,哪些信息是可获取的。 
pageContext对象提供存取所有在此网页中可被利用的隐含对象,并且可以管理它们的属性。 
 
6 与Error/Servlet 有关的隐含对象当JSP 网页有错误时会产生异常,而exception 对象就来针对这个异常做处理。 


page 对象表示Servlet 本身; 
config 对象则是存放Servlet 的初始参数值。 
 
7 request对象request 对象包含所有请求的信息,如:请求的来源、请求头、cookies和请求相关的参数值等等。 
在JSP 网页中,request 对象是实现javax.servlet.http.HttpServletRequest 接口的类, 
HttpServletRequest 接口所提供的方法,可以将它分为四大类: 
 
8 response对象response 对象主要将JSP 处理数据后的结果传回到客户端。response 对象是实现javax.servlet.http.HttpServletResponse 接口的类。 
 
9 out对象out 对象方法说明 
void clear( ) 清除输出缓冲区的内容 
void clearBuffer( ) 清除输出缓冲区的内容 
void close( ) 关闭输出流,清除所有的内容 
int getBufferSize( ) 取得目前缓冲区的大小(KB) 
int getRemaining( ) 取得目前使用后还剩下的缓冲区大小(KB) 
boolean isAutoFlush( )如果回传为true,表示如缓冲区满了,会自动清除;若为false,表示如果缓冲区满了,不会自动清除,而会产生异常处理 
 
10 session对象session 对象表示当前用户的会话(session)状况,用此项机制可以轻易识别每一个用户,然后针对每一个别用户的要求,给予正确的响应。例如:购物车最常使用session 的概念,当用户把物品放入购物车时,他不须重复做身份确认的动作(如:Login),就能把物品放入用户的购物车。但服务器利用session 对象,就能确认用户是谁,把它的物品放在属于用户的购物车,而不会将物品放错到别人的购物车。除了购物车之外,session 对象也通常用来做追踪用户的功能,session 对象实现javax.servlet.http.HttpSession 接口, 
 
11 application 对象application 对象实现javax.servlet.ServletContext 接口,它主要功用在于取得或更改Servlet 的设定。application 对象拥有Application 的范围,意思就是说它的生命周期是由服务器产生开始至服务器关机为止 
 
12 pageContext 对象pageContext对象能够存取其他隐含对象。当隐含对象本身也支持属性时,pageContext对象也提供存取那些属性的方法。不过在使用下列方法时,需要指定范围的参数: 
Object getAttribute(String name, int scope) 
Enumeration getAttributeNamesInScope(int scope) 
void removeAttribute(String name, int scope) 
void setAttribute(String name, Object value, int scope) 
 
13 pageContext 对象范围参数有四个常数,分别代表四种范围:PAGE_SCOPE 代表Page范围,REQUEST_SCOPE代表Request 
范围,SESSION_SCOPE 代表Session 范围,最后APPLICATION_SCOPE 代表Application 范围 
 
14 exception 对象当JSP 网页有错误时会产生异常,而exception 对象就来针对这个异常做处理。 
exception 对象 
exception 对象和session 对象一样,并不是在每一个JSP 网页中都能够使用。若要使用exception 对象时,必须在page 指令中设定。 


 
15 page 对象page对象代表JSP本身,更准确地说,它代表JSP被转译后的Servlet,因此,它可以调用Servlet类所定义的方法,不过实际上,page 对象很少在JSP中使用。 
 
16 config对象config 对象里存放着一些Servlet 初始的数据结构,config 对象和page 对象一样都很少被用到。config 对象实现于javax.servlet.ServletConfig 接口,它共有下列四种方法:public String getInitParameter(name) 
public java.util.Enumeration getInitParameterNames( ) 
public ServletContext getServletContext( ) 
public Sring getServletName( ) 


前一篇:定做程序设计
后一篇:JavaBean的事件,在jsp中的使用java中的事件方法
分享到: