1 / 55

第十二讲

第十二讲. 课   题  JavaBean 编程与应用 目的要求 掌握在 JSP 中如何使用 JavaBean 及怎样编写 JavaBean 教学重点  JSP 中如何使用 JavaBean 教学难点 利用 JavaBean 连接数据库 教学课时 4 (含 2 课时上机) 教学方法 讲解、示例与启发式教学相结合  教学内容和步骤. 12.1 JAVABEAN 编程

alban
Download Presentation

第十二讲

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十二讲

  2. 课  题  JavaBean编程与应用 目的要求 掌握在JSP中如何使用JavaBean及怎样编写JavaBean 教学重点  JSP中如何使用JavaBean 教学难点 利用JavaBean连接数据库 教学课时 4(含2课时上机) 教学方法 讲解、示例与启发式教学相结合  教学内容和步骤

  3. 12.1 JAVABEAN编程 JavaBean 是一种基于 Java 的软件组件。 JSP 对于在 Web 应用中集成 JavaBean 组件提供了完善的支持。这种支持不仅能缩短开发时间(可以直接利用经测试和可信任的已有组件,避免了重复开发),也为 JSP 应用带来了更多的可伸缩性。 JavaBean 组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据提取等。如果我们有三个 JavaBean ,它们分别具有显示新闻、股票价格、天气情况的功能,则创建包含所有这三种功能的 Web 页面只需要实例化这三个 Bean ,使用 HTML 表格将它们依次定位就可以了。

  4. 为说明在 JSP 环境下 JavaBean 的应用,我们创建了一个名为 TaxRate 的 Bean 。它有两个属性,即 Product (产品)和 Rate (税率)。两个 set 方法分别用来设置这两个属性,两个 get 方法则用于提取这两个属性。在实际应用中,这种 Bean 一般应当从数据库提取税率值,此处我们简化了这个过程,允许任意设定税率。 例1: 下面是这个 Bean 的代码清单: package tax; public class TaxRate { String Product; double Rate;

  5. public TaxRate() { this.Product = "A001"; this.Rate = 5; } public void setProduct (String ProductName) { this.Product = ProductName; } public String getProduct() { return (this.Product); } public void setRate (double rateValue) {

  6. this.Rate = rateValue; } public double getRate () { return (this.Rate); } }   在 JSP 页面中应用上述 Bean 要用到 < jsp:useBean> 标记。依赖于具体使用的 JSP 引擎的不同,在何处配置以及如何配置 Bean 的方法也可能略有不同。本文将这个 Bean 的 .class 文件放在 c:.0INF目录下,这里的 tax 是一个专门存放该 Bean 的目录。下面是一个应用上述 Bean 的示例页面:

  7. < HTML> < BODY> < %@ page language="java" %> < jsp:useBean id="taxbean" scope="application" class="tax.TaxRate" /> < % taxbean.setProduct("A002"); taxbean.setRate(17); %>  使用方法 1 : < p>  产品 : < %= taxbean.getProduct() %> < br>  税率 : < %= taxbean.getRate() %> < p>

  8. < % taxbean.setProduct("A003"); taxbean.setRate(3); %> < b> 使用方法 2 : < /b> < p>  产品 : < jsp:getProperty name="taxbean" property="Product" /> < br>  税率 : < jsp:getProperty name="taxbean" property="Rate" /> < /BODY> < /HTML>

  9. 在 < jsp:useBean> 标记内定义了几个属性,其中 id 是整个 JSP 页面内该 Bean 的标识, scope 属性定义了该 Bean 的生存时间, class 属性说明了该 Bean 的类文件(从包名开始)。    这个 JSP 页面不仅使用了 Bean 的 set 和 get 方法设置和提取属性值,还用到了提取 Bean 属性值的第二种方法,即使用 < jsp:getProperty> 标记。 < jsp:getProperty> 中的 name 属性即为 < jsp:useBean> 中定义的 Bean 的 id ,它的 property 属性指定的是目标属性的名字。

  10. 事实证明, Java Servlet 是一种开发 Web 应用的理想构架。 JSP 以 Servlet 技术为基础,又在许多方面作了改进。 JSP 页面看起来象普通 HTML 页面,但它允许嵌入执行代码,在这一点上,它和 ASP 技术非常相似。利用跨平台运行的 JavaBean 组件, JSP 为分离处理逻辑与显示样式提供了卓越的解决方案。 JSP 必将成为 ASP技术的有力竞争者。

  11. 例2: Jsp的一个重要特性就是可以用javaBean实现功能的扩展。将大部分功能放在javaBean中完成,以使jsp页面程序更干净简洁、利于维护。JavaBean可以很方便的用来捕获页面表单的输入并完成各种业务逻辑的处理。 testA.jsp页面: <%@ page contentType="text/html;charset=GBK" %> <html> <head> <title>示例</title> </head>

  12. <body scroll=no> <form name="frma" method="post" action="testB.jsp" > <p> 你的姓名: <input type="text" size="15" name="yourName" value="" id=yourName> <input type="button" align="center" name="subBtn" value="[ 提交]" onClick="f_check()" id=subBtn> </p>  </form> </body> </html> <script language="JavaScript" type="text/javascript"> <!—

  13. function f_check(){ if(document.forms(0).yourName.value==""){ alert("请输入姓名"); }else{ document.forms(0).submit(); } } --> </SCRIPT> testB.jsp页面 <%@ page contentType="text/html;charset=GBK" %> <html> <head>

  14. <title>示例</title> </head> <jsp:useBean id="tBean" scope="page" class="bean.TestBean" > <jsp:setProperty name="tBean" property="*" /> </jsp:useBean> <body scroll=no> <form name="frmb" method="post" action="" >  <p> <%=tBean.hello()%> </p>

  15. </form> </body> </html> TestBean.java代码: package bean; public class TestBean{ private String yourName = "";  public void setYourName(String yourName){ this.yourName = ConvertGBK(yourName); public String hello(){ String strHello = "Hello:"+yourName; return strHello; } 

  16. //汉字转换方法 public String ConvertGBK(String str){ String strReturn=""; try{ strReturn=new String(str.getBytes("ISO-8859-1"),"GBK"); }catch(Exception ex){ System.out.println("TestBean.ConvertGBK():ex="+ex.toString()); } finally{ return strReturn; } }

  17. testA.jsp页面上“提交”按钮将表单提交给testB.jsp页面,testB.jsp获得的testA.jsp中yourName文本框的值并在实例化TestBean后,执行bean中的setYourName方法,接着执行hello方法,在页面上输出对你问好的语句。testA.jsp页面上“提交”按钮将表单提交给testB.jsp页面,testB.jsp获得的testA.jsp中yourName文本框的值并在实例化TestBean后,执行bean中的setYourName方法,接着执行hello方法,在页面上输出对你问好的语句。 这个简单的示例体现了在jsp中使用javaBean的两个重要方面,一个是捕获表单的输入并保存,一个是执行逻辑功能。所以,依此两个功能还可以将用在jsp中的javaBean分为值Bean(value bean)和工具Bean (utility bean),如下:

  18. 值Bean package bean; public class TestValueBean{ private String yourName = ""; public void setYourName(String yourName){ this.yourName = ConvertGBK(yourName);  //汉字转换方法 public String ConvertGBK(String str){ String strReturn=""; try{

  19. strReturn=new String(str.getBytes("ISO-8859-1"),"GBK"); }catch(Exception ex){ System.out.println("TestBean.ConvertGBK():ex="+ex.toString()); } finally{ return strReturn; } 工具Bean package bean; public class TestUtilityBean{

  20. public String hello(TestValueBean tvBean){ String strHello = "Hello:"+tvBean.getName(); return strHello;} public String hello(String yourName){ String strHello = "Hello:"+yourName; return strHello; } }

  21. 当然,从这个例子看是没有必要分开value bean和utility bean的,但在具有复杂业务逻辑的web应用程序中就可以用value bean实现对表单输入的捕获、保存,减少对数据库中那些值几乎不变的实体的访问,或将value bean放在一定作用域内使此作用域内的多个jsp页面共享。用utility bean完成操作数据库、数据处理等业务逻辑,以value bean 或页面传递的值为参数。当然,从这个例子看是没有必要分开value bean和utility bean的,但在具有复杂业务逻辑的web应用程序中就可以用value bean实现对表单输入的捕获、保存,减少对数据库中那些值几乎不变的实体的访问,或将value bean放在一定作用域内使此作用域内的多个jsp页面共享。用utility bean完成操作数据库、数据处理等业务逻辑,以value bean 或页面传递的值为参数。

  22. 12.1.1 数据类型的转换 在使用<jsp:getProperty…/><jsp:setProperty…/>指令设置或获取JavaBean中属性时涉用到相关的数据类型转换 表1 <jsp:getProperty…/>

  23. 表2 <jsp:setProperty…/>

  24. 12.1.2 session事件的运用 • 在jsp页面中,将Bean对象保存至session对象时,可以定义Bean响应HttpSessionBindingEvent事件。当Bean对象加入session、Bean从session中删除以及session对象终止时,将会触发此事件。因此,我们可以利用这两个事件,执行数据起始、善后的工作。由此,我们可以想到,把jsp页面中最耗费服务器资源的数据库连接工作放入HttpSessionBindingEvent事件中。当一个会话开始时,建立一个“数据库连机”,随后的整个会话过程中,所有与数据库相关的操作均使用这一个“连机”,这样,就避免了每执行一次数据库操作就产生一个数据库连机的巨大消耗。当此会话结束时,再关闭释放这个“数据库连机”。

  25. 如果要Bean对象响应HttpSessionBindingEvent事件,则该Bean对象必须实现如果要Bean对象响应HttpSessionBindingEvent事件,则该Bean对象必须实现 HttpSessionBindingListener接口,并且定义响应会话开始的valueBound方法以及响应会话结束的valueUnbound方法。 现在,我们来实做一个例子,首先,建立一个“用来建立会话级别数据库联机”的Bean文件DBCon.java,它的源代码如下所示:

  26. 例3: /*  * 文件名:DBCon.java  *  * 类名:DBCon  *  * 所属包:j2ee.jsp  *  * 导入包:java.sql.*;javax.servlet.http.*;   *  * 作者:杨??  *  * 创建时间:2003.12.9  *

  27. * 用途描述:在此JavaBean中建立会话级别的数据库联机,供会话过程中的各个jsp页面使用  *   * 版本号:1.0  *  */ package j2ee.jsp; import javax.servlet.http.*;  import java.sql.*;

  28. //定义DBCon类别实做HttpSessionBindingListener介面 public class DBCon implements HttpSessionBindingListener {     //与数据库连结有关的Bean属性 private Connection con = null;       /**        * 方法名:BulidConnection

  29.  * 级别:private        * @param     (无)        * @return    (无)        * @throws    (无)        * 作用:建立一个数据库联机        */     private void BulidConnection()     {         try         { System.out.println("BulidConnection()方法被调用");      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  30.  //载入驱动程式类别 con = DriverManager.getConnection("jdbc:odbc:test");             //建立数据库连线             }         catch(Exception ex)         {     System.out.println(ex.toString());         }             }       /**

  31.  * 方法名:close        * 级别:private        * @param     (无)        * @return    (无)        * @throws    (无)        * 作用:关闭数据库联机        */     private void close()     {         try         {             con.close(); //关闭Connection对象         con =  null;         }

  32. catch(SQLException sex)         {     System.out.println(sex.toString());         }         }       /**        * 方法名:getConnection        * 级别:public        * @param     (无)

  33. * @return    Connection     数据库联机        * @throws    (无)        * 作用:返回一个数据库联机        */     public Connection getConnection()     {          //若con为null时, 重新建立数据库连结 if(con == null)             BulidConnection();         return this.con;     }           /**

  34.   * 方法名:valueBound        * 级别:public        * @param     HttpSessionBindingEvent     事件        * @return    (无)        * @throws    (无)        * 作用:建立一个数据库联机,并输出相关信息        */     public void valueBound(HttpSessionBindingEvent event)        {          BulidConnection(); System.out.println("会话级别的数据库连接已经建立!!!");        }

  35.  /**        * 方法名:valueUnbound        * 级别:public        * @param     HttpSessionBindingEvent     事件        * @return    (无)        * @throws    (无)        * 作用:关闭一个数据库联机,并输出相关信息        */     public void valueUnbound(HttpSessionBindingEvent event)     {         if(con != null)             close(); //呼叫close方法

  36. System.out.println("会话级别的数据库连接已经关闭!!!");     } } 编译这个Bean源文件。注意,编译前要设定好classpath的路径,使得它所包含的类库中有javax.servlet.http.*包。然后,建立两个用来测试此Bean的jsp页面文件DBBean1.jsp与DBBean2.jsp,它们的程序代码差不多,都是用来显示数据库内容的,现在就只列出DBBean1.jsp的源文件,如下: <%@ page contentType="text/html; charset=GB2312"      import="java.sql.*"%> <HTML> <HEAD>

  37. <TITLE>利用Bean对象建立数据库链接</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue> 利用Bean对象建立数据库链接 </FONT> </CENTER> <HR> <P></P>

  38. <CENTER> <%--起始建立数据库链接的Bean对象--%> <jsp:useBean id="ConBean" scope="session"       class="j2ee.jsp.DBCon"/> <% Connection con = ConBean.getConnection(); //从Bean对象取得已完成建立的数据库链接 Statement stmt = con.createStatement(); //建立Statement对象 ResultSet rs = stmt.executeQuery("SELECT product_name, price FROM products"); //建立ResultSet(结果集)对象,并执行SQL叙述 %>

  39. <TABLE  bgcolor=DodgerBlue>     <TR  bgcolor=SkyBlue>         <TD><B>书  名</B></TD><TD><B>价   格</B></TD>         </TR>         <%     //利用while循环将数据表中的记录列出 while (rs.next())     {         %>         <TR bgcolor=LightGoldenrodYellow>                 <TD><B><%= rs.getString("product_name") %></B></TD>

  40. <TD><B><%= rs.getString("price") %></B></TD>                     </TR>         <%     }     rs.close(); //关闭记录集 stmt.close(); //关闭Statement对象 %>     </TABLE> </CENTER> <a href="DBBean2.jsp">DBBean2.jsp</a> </BODY> </HTML>

  41. 12.2 在JSP中用JavaBeans、JDBC-ODBC访问数据库 JSP(JavaServer Pages)是由Sun Microsystems公司倡导、许多公司参与建立的一种动态网页技术标准。使用JSP技术,Web页面开发人员可以使用Html或者XML标识来设计和格式化最终页面。使用JSP标识(tag)或者小脚本(Scriptlet)来生成页面上的动态内容。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。

  42. JavaBeans是一种基于Java的软件组件,JavaBeans和 ActiveX控件一样,可以通过封装业务逻辑建立一整套可重复利用的对象库。JSP对于在 Web应用中集成JavaBeans组件提供了完善的支持,这种支持不仅能缩短开发时间(可以直接利用经过测试和可信任的已有组件),避免重复开发,也为JSP应用带来了更多的可伸缩性。JavaBeans组件可以用来执行复杂的计算任务、或负责与数据库的交互以及数据提取等,本文将通过一个实例介绍在JSP中利用JavaBeans通过JDBC-ODBC Bridge访问客户信息数据库。

  43. 数据库连接对动态网站来说是最为重要的部分,Java中连接数据库的技术是JDBC(Java Database Connectivity)。很多数据库系统带有JDBC驱动程序,Java程序就通过JDBC驱动程序与数据库相连,执行查询、提取数据等等操作。Sun 公司还开发了JDBC-ODBC bridge,用此技术Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如Oracle、 Sybase、MS SQL Server和MS Access等数据库。下面介绍如何用Access实现一个客户信息查询程序。

  44. 首先建立一个Access数据库Customers.mdb,其中的表Customers有字段id(自动增量型,并设为主关键字)、name(文本型,长度10)、address(文本型,长度30)、 info(备注型)。 ⑵ 在Control Panel(控制面板)的ODBC Datasource模块中加入System DSN,取名 Customers,并指向Customers.mdb。 ⑶ 创建一个JavaBean,名为DBconn.java,并保存在支持JSP的Web服务器的缺省文档根目录下。DBconn.java主要是封装与数据库的连接操作,内容如下:

  45. import java.sql.*; public class DBconn { StringDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; String ConnStr = "jdbc:odbc:Customers"; Connection conn = null; ResultSet rs = null; public DBconn { try { Class.forName(DBDriver);

  46. //加载数据库驱动程序 } catch(java.lang.ClassNotFoundException e) { System.err.println("DBconn (): " + e.getMessage()); public ResultSet executeQuery(String sql) { } } rs = null; try { conn = DriverManager.getConnection(ConnStr);

  47. //与DBMS建立链接 Statement stmt = conn.createStatement(); rs = stmt.executeQuery(sql); } catch(SQLException ex) { } System.err.println("aq.executeQuery:"+ex.getMessage()); } return rs; } }

  48. DBconn.java编辑好后,在DOS状态下,利用JDK的javac命令编译 DBconn.java形成相应的class文件。 ⑸ 建立Customers.jsp文件,在JSP中调用以上编译好的JavaBeans,其内容如下: < html > < head > < meta http-equiv="Content-Type" content="text/html; charset=gb2312" > < title >客户信息调查< /title > < /head > < body >

  49. < p >< b >客户信息调查< /b >< /p > < %@ page language="java" import="java.sql.*" % > < jsp:useBean id="DBconn1" scope="page" class="DBconn" / > <% ResultSet RS = DBconn1.executeQuery("SELECT * FROM Customers"); while (RS.next()) { out.print("< LI >" + RS.getString("name") + "< /LI >"); } RS.close(); %>

More Related