• 1. 第七章JavaBean和标准动作
  • 2. 知识回顾什么是JSP内置对象? 列举一些常用的JSP内置对象, 并说明它们的作用 请说明JSP内置对象session与application的区别 include指令的作用是什么?2018/10/192
  • 3. 预习检查什么是JavaBean? 在JSP中如何使用JavaBean?2018/10/193
  • 4. 本章任务升级JavaEye新闻系统实现以下功能 使用JSP标准动作进行用户登录验证 使用JSP标准动作添加新闻 2018/10/194
  • 5. 本章目标掌握JavaBean的概念 会使用JSP标准动作 2018/10/195
  • 6. 组件开发JavaEE是基于组件开发 请求ServletJavaBeanJSP页面执行调用转向响应JSTL使用访问返回数据数 据 库客户端2018/10/196
  • 7. 组件开发小孩的积木 积木块组装成品JavaEE组件组件间协作应用程序2018/10/197
  • 8. 为什么需要JavaBean… public int saveOrder(String username,String zipcode,String phone, String creditcard,double total){ try { con = ConnectionManager.getConnction(); String strSql = "insert into BookOrder(username,zipcode,phone," + "creditcard,total) values(?,?,?,?,?)"; pStatement = con.prepareStatement(strSql); pStatement.setString(1, username); //设置其它参数值 result = pStatement.executeUpdate(); } catch (SQLException sqlE) { sqlE.printStackTrace(); } return result; } …参数过多,且为对象属性如何按照OO设计参数?使用JavaBean进行参数的传递参数的使用2018/10/198
  • 9. JavaBean介绍接触过的JavaBean 新闻发布中新闻的一级、二级标题 JavaBean的来源 Bean:豆子 JavaBean是应用程序的组成部分 JavaBean的分类 封装数据 封装业务方法 public class SecondLevelTitle { public SecondLevelTitle() { } private int id; private String titleName; private int parentTitleId; private String creator; public int getId() { return this.id; } public void setId(int id) { this.id=id; } …//其它setter、getter方法 }2018/10/199
  • 10. JavaBean基本规范必需有一个无参构造函数 属性名通常定义为private 提供getter和setter方法,并且是public getter方法是返回对应的属性值,无参数,返回类型为属性的类型,以get开头,紧跟属性名,属性名首字母要大写 setter方法是设置对应的属性值,void返回类型,参数的类型同其对应的属性类型,以get开头,紧跟属性名,属性名首字母要大写 对于boolean类型,提供isXXX方法2018/10/1910
  • 11. getter/setter方法JavaBean 的属性Get() 方法Set() 方法定义了公有方法Get() 方法返回值定义了公有方法Set() 方法给属性赋值访问 JavaBean 的属性getter和 setter 方法用于访问 JavaBean 的属性2018/10/1911
  • 12. 封装数据的JavaBeanIEJavaBean -- Order.javapublic class Order { private String userName; // 用户名 private String zipcode; // 邮编 private String phone; // 电话 private String creditcard; // 信用卡 private double total; // 总额 public Order() { } public void setUserName(String userName) { this. userName = userName; } public String getUserName() { return userName; } …//其它属性的setter、getter方法 }将属性声明为私有属性无参的公有构造方法公有的设置属性值方法setXxx( )公有的获取属性值方法getXxx( )2018/10/1912
  • 13. 使用Eclipse工具自动生成getter/setter方法2018/10/1913
  • 14. 封装业务的JavaBean业务类 -- OrderOperation.javapublic class OrderOperation { public int saveOrder(Order order) { int result = 0; try { Connection con = ConnectionManager.getConnction(); String strSql = "insert into BookOrder(username,zipcode,phone," + "creditcard,total) values(?,?,?,?,?)"; PreparedStatement pStatement = con.prepareStatement(strSql); pStatement.setString(1, order.getUserName()); …//设置其它的参数值 result = pStatement.executeUpdate(); } catch (SQLException sqlE) { sqlE.printStackTrace(); } return result; } }把封装好数据的对象作为参数2018/10/1914
  • 15. JavaBean示例 public class MyBean { private String name; private boolean singleton; public MyBean() { } public String getName() { return name; } public void setName(String myname) { name = myname; } public void setSingleton(boolean singleton) { this.singleton = singleton; } public boolean isSingleton() { return singleton; } } 将 name等 属性声明为私有属性不带参数的默认构造函数getter() 方法返回一个值Set() 方法设置一个值返回一个boolean类型的值2018/10/1915
  • 16. JSP页面查询数据<% Connection conn = null; Statement stmt = null; ResultSet rs = null; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:news", "", ""); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from Customers"); while (rs.next()) { out.print(rs.getString(1)); out.print(rs.getString(2)); } rs.close(); stmt.close(); conn.close(); %>2018/10/1916
  • 17. JSP页面添加数据<% Connection conn = null; Statement stmt = null; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:news", "", ""); stmt = conn.createStatement(); stmt.executeUpdate("insert into Customers(customerID,CompanyName) values(‘jfcms', JFCMS')"); stmt.close(); conn.close(); %>2018/10/1917
  • 18. 用JavaBean改善代码重用package accp ; import java.sql.*; public class Conn { Connection conn = null ; public Connection getConn(){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn= DriverManager.getConnection("jdbc:odbc:news","",""); }catch(Exception e){ System.out.println(e.printStackTrace()); } return conn ; } }2018/10/1918
  • 19. JavaBean与JSP广义讲,符合规范的Java类都是JavaBean JavaBean的作用 封装数据 处理业务逻辑 JSP与JavaBean如何结合使用呢? Scriptlet JSP标准动作2018/10/1919
  • 20. 本章小结1请使用JSP标准动作创建一JavaBean对象,并对该对象的属性进行赋值 类所在的包和类名:com.entity.Users 类的属性userName,password2018/10/1920
  • 21. 常见错误 应该是"userName"这是什么错误?在Order中没有找到属性userName2属性名称错误2018/10/1921
  • 22. 常见错误 应该是“order”,要与 useBean中的id一致引用名称错误这是什么错误?2018/10/1922
  • 23. JSP标准动作标准动作用于: 将 JavaBean 嵌入 JSP 页面 设置和获取 JavaBean 的属性 将用户请求转发给其他页面 将其他页面的内容嵌入当前页面 标准动作可以为空标签及容器标签 标准动作中的属性区分大小写 JSP 中的标准动作使用 作为前缀JavaBeanJSP 可使用 JSP 标准动作调用 JavaBean 组件并访问属性JSP 页面2018/10/1923
  • 24. JSP标准动作JSP 标准动作包括:JSP 标准动作2018/10/1924
  • 25. useBean动作... ...创建引用并嵌入现有的 Beanid 属性创建对 class 属性中所述类的引用2018/10/1925
  • 26. useBean属性useBean有如下属性属性描述id实例名class引用的Java类type实现的Java接口scope使用域(范围)2018/10/1926
  • 27. useBean动作范围指定 JavaBean 在 JSP 页面中的可用性。各种范围选项如下:范围描述pageBean 只能在使用页面时使用。当加载新页面时,就会将其销毁(默认为此作用域)requestBean 在用户对其发出请求时存在sessionBean 一直存在于会话中,直至其终止或被删除为止applicationBean 在整个应用程序中均可使用2018/10/1927
  • 28. 标准动作及属性标准动作属性setPropertyname: javaBean的ID。property:设置属性名。value:属性对应的值getPropertyname:javaBean的ID。property:获取值的属性名。forwardpage: URL。可以接受paramincludepage:URL。flush=true:清空缓冲区可以接受paramparams管理param进行传值接受paramparamname:名称。value:值2018/10/1928
  • 29. setProperty动作... ...设置 JavaBean 在 JSP 页面中的属性name 属性指定对 JavaBean 类的引用指定 JavaBean 的属性名称2018/10/1929
  • 30. getProperty动作... ...获取 JavaBean 中指定的属性的值Name 属性指定对 JavaBean 类的引用Property 属性指定 JavaBean 的属性名称2018/10/1930
  • 31. 创建JavaBean在 JavaBean 中使用 get() 和 set()方法public class simpleBean { private String name = null; private int age = 0; public simpleBean() { } public String getName() { return name; } public void setName(String username) { name = username; } }2018/10/1931
  • 32. 在JSP中使用JavaBean使用 useBean、setProperty 和 getProperty 动作 在 JSP 中使用 JavaBean 姓名:
    年龄: 在 JSP 中使用 JavaBean 姓名:
    年龄: 演示:示例 52018/10/1932
  • 33. JSP标准动作调用JavaBean JSP标准动作与JavaBean的getter、setter方法public class Simplebean { private String name; private int age; public Simplebean() { //无参的构造函数 System.out.println("调用无参构造方法,创建实例!!!"); } public String getName() { //属性的getter方法 System.out.println("调用了getName()方法,获取name值"); return name; } public void setName(String username) //属性的setter方法 name = username; System.out.println("调用了setName()方法,设置name值"); } }SimpleBean.java方法是谁调用的?<%@page contentType="text/html; charset=GBk" %> 在 JSP 中使用 JavaBean 姓名:
    年龄: setProperty动作调用 JavaBean的setter方法getProperty动作调用 JavaBean的getter方法2018/10/1933
  • 34. 使用标准动作实现登录验证 登录验证… public boolean getValid() { Connection con = ConnectionManager.getConnection(); PreparedStatement pStatement = null; String sql = "select * from userinfo where loginname = ?"; try { pStatement = con.prepareStatement(sql); pStatement.setString(1, getName()); ResultSet rs = pStatement.executeQuery(); if (rs.next() && rs.getString("password").equals(getPassword())) valid = true; else valid = false; } catch (Exception ex) { ex.printStackTrace(); } return valid; } …判断是否存在该用户演示示例2: UserManager.java2018/10/1934
  • 35. 标准动作和JavaBean使用JSP标准动作和JavaBean进行数据验证 <%@ page contentType="text/html;charSet=GBK" pageEncoding="GBK"%> <% if (userManager.getValid()) { %> <% } else { %> <% } %>创建UserManager对象,并为属性赋值调用验证方法,判断用户是否存在JSP标准动作,转发到page属性指定的页面,等价 与RequestDispatcher对象的forward(req,res)方法根据结果,转发到相应页面register.jsp2018/10/1935
  • 36. 本章总结为什么使用JSP标准动作? 我们已经学过的JSP标准动作有哪些? 的实质是什么? 2018/10/1936
  • 37. 本章作业理论作业 课后习题(根据带课老师的具体要求) 上机作业 课后上机题全做 (根据带课老师的具体要求)2018/10/1937
  • 38. 2018/10/1938