




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSP+TOMCAT+MYSQL教程JSP+TOMCAT+MYSQL讲义(四)1一、JavaBean21.1 JavaBean的概念21.1.1为什么要使用JavaBean?21.1.2什么是JavaBean21.2 JavaBean的用法31.2.1 JavaBean的属性41.2.2 如何创建JavaBean?41.3 JavaBean实例71.4 JavaBean的作用域范围11二、DAO122.1 DAO的概念12三、JavaBean与DAO实例143.1 DAO连接数据库143.1.1 首先建立一个cn.gdpu.daodemo.DataBaseConnection类,用于连接数据库143.2JavaBean完成业务处理153.2.1 建立Student的VO对象 建立DAO对象163.2.3 下面就一个一个的完成Implementation这个类。183.3 JSP页面的展示24一、JavaBean1.1 JavaBean的概念1.1.1为什么要使用JavaBean?q 前几节课所编写的jsp页面中混合了HTML代码和java代码,页面显示和业务逻辑混合在一起可读性和可维护性都比较差q 为了分离页面的HTML代码和Java代码,我们单独编写一个类来封装页面的业务逻辑,在页面中调用该类的方法即可完整所需的功能q 这种封装业务逻辑的类就是JavaBean组件1.1.2什么是JavaBeanq JavaBean组件本质上就是一个类,只不过这个类需要遵循一些编码的约定q 在jsp页面中可以通过new操作符来实例化JavaBean类的对象,也可以利用jsp技术中提供的动作元素来访问JavaBeanJavaBean 就是一个Java 类,也就意味着,JAVA 的一切特性,此处都可以使用,此javaBean 没有图形显示代码,只是完成基本业务逻辑。JavaBean 可以使用JAVA 的封装、继承、多态。使用JavaBean 封装许多可重复调用的代码。JavaBean 的开发过程是通过项目不断积累经验结论:不会JavaBean 的开发人员,不能称为J2EE 开发人员使用JavaBean 可以达到显示与业务的分离q 显示:JSPq 业务:JavaBean一般web网站的建立模式(MVC)1.2 JavaBean的用法实际上WEB-INF/classes 是一个classpath 路径,所有的class 文件,只要放在此目录都可以被访问到与其他类的调用方式是一样的 Java 命名规范:1、包命名:全部字母小写:cn.mldn.lxh2、类命名:单词的首字母大写:SimpleBean3、属性名称:第一个单词的首字母小写,之后每个单词的首字母大写:studentName ;4、方法命名:与属性命名相同:public void sayHello() ;5、常量命名:全部单词大写:final String DBDRIVER =MLDN1.2.1 JavaBean的属性q JavaBean特性q 它是一个公开的public类q 它有一个默认的构造方法,也就是不带参数的构造方法(在实例化JavaBean对象时,需要调用默认的构造方法)q 它提供setXXX()方法和getXXX()方法来让外部程序设置和获取JavaBean的属性。q 符合上述条件的类就可以看成是JavaBean组件q 属性(property)是JavaBean组件内部状态的抽象表示,外部程序使用属性来设置和获取JavaBean组件的状态。为了让外部程序能够知道JavaBean提供了那些属性,JavaBean的编写者必须遵循标准的命名方式q 例子:一个String 类型的name属性对应的方法:q public String getName()q public void setName(String name)q 为每一个属性添加一个get和set方法,其中属性名字的第一个字母大写,然后在名字前面加上“get”和“set”q 只有get方法则是只读属性,只有set方法则是可写属性,两者都有则是可读可写属性q get/set 命名方式有一个例外。那就是对于boolean类型的属性,应该使用is/set命名方法,也可以使用get/set方法q 例子:private boolean marriedpublic boolean isMarried()public void setMarried()1.2.2 如何创建JavaBean?q JavaBean有4中类型的属性:简单属性、索引属性、绑定属性、约束属性q 在jsp中,支持javaBean的简单属性和索引属性,绑定属性和约束属性则主要用于图形界面编程中q 简单属性q 接受单个值的属性。只要采用get/set命名约定即可q 索引属性q 就是获取和设置数组时使用的属性。要运用索引属性,需要提供两对get/set方法,一对用于数组,另一对用于数组中的元素 对象所属的包.类名称路径如果使用此标签,则JAVABEAN 中必须有一个无参构造方法,此为明确规定1.3 JavaBean实例创建新的web项目JavaBeanDemo。我们对学生对象进行操作:student(id,name,sex,age)在src目录下,new一个classq 类名:Studentq 包名为:cn.gdpu.jdb.student输入属性后,可以在编辑窗口中,用右键,进入“Generate Getters and Setters”自动生成set和get方法。另外必须写一个无参的类同名构造方法q public Student()具体完成代码如下:package cn.gdpu.jbd.student;public class Student private String id;private String name;private String sex;private int age;/同名无参数构造函数,必须的。public Student()public String getId() return id;public void setId(String id) this.id = id;public String getName() return name;public void setName(String name) = name;public String getSex() return sex;public void setSex(String sex) this.sex = sex;public int getAge() return age;public void setAge(int age) this.age = age;回到index.jsp现在开始写调用JavaBean的代码: 在 JSP 中使用 JavaBean 姓名: 年龄: 1.4 JavaBean的作用域范围q page 范围:属性只在当前页有效,如果跳转到其他页面,则需要重新实例化适用于:JSP 页面操作资源时使用q request 范围:属性只保存在一次服务器跳转中前提:使用跳转才行q session 范围:属性保存在一次会话之中,可以使用任意方式连接其他页面,则此对象只实例化一次适用于:使用JSP 直接开发购物车q application 范围:属性公有,此对象在整个服务器上只实例化一次尽量少用,因为application 会占用资源JavaBean 的开发要求:1、必须放在一个包中2、public class3、属性封装4、通过setter 和getter 方法设置和取得属性5、通过JSP 调用,则需要一个无参构造方法q JSP 调用JavaBean 标签:q JSP 设置属性:参数名称必须与Bean 中的属性名称一致q JSP 取得属性二、DAO结合使用 JSP 页面和 JavaBean 来开发 Web 应用程序2.1 DAO的概念之前的开发可以发现以下问题:q 所有的JDBC 代码写在JSP 页面之中,维护困难q JSP 中不应该使用任何sql 包,即:不能在JSP 中直接使用java.sql.*,原因:JSP 只关注于数据的显示,q 而不关心数据是从那里来,或向那里存储q 所有的数据库操作代码最好使用PreapredStatement区分:J2EE 的组件层次客户端 表示层业务层 数据层 数据库*.jsp/servletDAO 属于J2EE 数据层的操作即:在DAO 中封装了一个表在一个项目中所应该具有的全部操作什么是DAO?DAO是Data Access Object数据访问接口,数据访问:故名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。DAO的功能:1. DAO用来封装Data Source的.就比如,Connection conn = DAOFacotry.createConnection().就可以把Driver. URL. username, passpword这一些放在DAO中以后要更改数据库的类型.比如要把MSSQL换成Oracle的话.只需要更改DAOFacory里面的getConnection()里面的Driver.URL.之类的.2. DAO也是把对数据库的操作(比如最基本的CRUD操作)全部封装在里面.比如说你要你要插入一个新的用户.那么.在DAO中我们只需要提供一个insertUser(User user)这一个方法就可以了.具体的操作是在DAO中实现的.那么对于要调用DAO的时候.我们只要知道insertUser(User)是用来插入一个新的用户.而不需要知道是如何实现的。一般 DAO是与Abstract Factory模式一起来用的.Factory来建立数据库和定位具体的DAO(比如说是UserDao.CustomerDao.).一般将getConnection设置为static.也可以把HibernateSessionFactory这一个公共类放在这一AbstractFactory类中去.public class DAOFactory private static final SessionFactory sessionFacotory;/ 定义一个TrheadLocal .static Session currentSession().public UserDao getUserDAO() return new UserDaoImpl(sesssion);pulbic OtherDao getOtherDAO() return new OtherDaoImpl(session);.public interface UserDao public insertUser(FormBean)public updateUser(FormBean);然后就实现DAO的接口: (Struts的FormBean.VO来的.)public class UserDaoImpl implements UserDao private Session session;public UserDaoImpl(Session session)this.session = session;.public insertUser(FormBean) ./.session.save(UserPO);./.return FormBean;public FormBean updateUser(FormBean) ./.session.update(UserPO);./.return FormBean;最后定义你的PO:public class UserPO String firstname, lastname, password. 有如下创建数据库脚本- 创建表CREATE TABLE person(id varchar(32) not null primary key ,name varchar(20) not null ,password varchar(20) not null ,age varchar(20) not null ,email varchar(20) not null) ;程序在变更数据库之后,前台页面不会出现过多改变?首先需要规定出整个模块之中对person 表的全部操作: 增加 修改 删除 按ID 查询 查询全部 模糊查询按以上要求,规定出操作此张表的标准,之后只要针对于不同的数据库实现这些标准即可。在JAVA 中只有通过接口可以定义出标准DAO 规定的就是一个接口q 举例:比如说一个图书馆,图书馆可以增加书籍如果要增加之前,应该把一本书给图书馆才可以吧?q 插入 针对对象插入q 对象 VO、TO、POJO(值对象、传输对象、最根本的JAVA 对象)即:只包含属性和setter、getter 方法的类客户 -vo DAOVO 的对象与表中的字段完全对应定义好接口之后,要定义出接口的具体实现类,具体实现DAO 接口中对数据库表的一切操作DAO是Data Access Object数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。 在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。定义一个数据库连接类,由数据库连接类,统一管理数据库连接使用DAO 之后,前台调用代码减少很多,但可以发现类增加了可以发现以下的一个重要问题: PersonDAO dao = new PersonDAOImpl() ;接口直接通过其子类实例化,直接的影响就是程序在调用时必须知道具体的子类,这样会造成修改不方便所以,必须使用工厂设计,使前台不关注于具体子类是谁DAO 整体设计,是采用以下模式:调用处 DAO 工厂 具体子类实现 完成数据库操作|-|- VO -|q 直接的好处:前台显示与后台逻辑操作分离三、JavaBean与DAO实例DAO接口Interface业务处理JavaBeanDAO 实现ImplementationVO对象Student工厂类Factory3.1 DAO连接数据库3.1.1 首先建立一个cn.gdpu.daodemo.DataBaseConnection类,用于连接数据库package cn.gdpu.daodemo;import java.sql.*;public class DataBaseConnection String DBDRIVER = com.mysql.jdbc.Driver ;/ 定义数据库连接地址String DBURL = jdbc:mysql:/:3306/school ;String DBUSER=root;String DBPASS=123456;/ 定义数据库连接对象,属于java.sql包中的接口Connection conn = null ;public DataBaseConnection() throws ExceptiontryClass.forName(DBDRIVER) ;this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;catch (Exception e)throw e;/ 取得数据库连接public Connection getConnection()return this.conn ;/ 关闭数据库连接public void close()throws Exceptiontrythis.conn.close() ;catch (Exception e)throw e;3.2JavaBean完成业务处理3.2.1 建立Student的VO对象cn.gdpu.daodemo.student.vo.Studentpackage cn.gdpu.daodemo.student.vo;public class Student private String id;private String name;private String sex;private int age;public String getSex() return sex;public void setSex(String sex) this.sex = sex;public Student()public String getId() return id;public void setId(String id) this.id = id;public String getName() return name;public void setName(String name) = name;public int getAge() return age;public void setAge(int age) this.age = age;.3.2.2 建立DAO对象在此对象中,我们定义的数据的增删改查等操作的接口,是主要的业务逻辑。注意这里定义的是接口,interfacepackage cn.gdpu.daodemo.student.dao;import cn.gdpu.daodemo.student.vo.*;import java.util.*;public interface StudentDAO / 增加操作public void insert(Student student) throws Exception ;/ 修改操作public void update(Student student) throws Exception ;/ 删除操作public void delete(String id) throws Exception ;/ 按ID查询操作public Student queryById(String id) throws Exception ;/ 查询全部public List queryAll() throws Exception ;/ 模糊查询public List queryByLike(String cond) throws Exception ;完成这个接口的具体实现的代码cn.gdpu.daodemo.student.dao.impl.StudentDAOImplpackage cn.gdpu.daodemo.student.dao.impl;import java.util.List;import cn.gdpu.daodemo.student.dao.StudentDAO;import cn.gdpu.daodemo.student.vo.Student;public class StudentDAOImpl implements StudentDAO public void delete(String id) throws Exception / TODO Auto-generated method stubpublic void insert(Student student) throws Exception / TODO Auto-generated method stubpublic List queryAll() throws Exception / TODO Auto-generated method stubreturn null;public Student queryById(String id) throws Exception / TODO Auto-generated method stubreturn null;public List queryByLike(String cond) throws Exception / TODO Auto-generated method stubreturn null;public void update(Student student) throws Exception / TODO Auto-generated method stub3.2.3 下面就一个一个的完成Implementation这个类。package cn.gdpu.daodemo.student.dao.impl;import java.util.ArrayList;import java.util.List;import cn.gdpu.daodemo.student.dao.StudentDAO;import cn.gdpu.daodemo.student.vo.Student;import cn.gdpu.daodemo.*;import java.sql.*;public class StudentDAOImpl implements StudentDAO public void delete(String id) throws Exception / TODO Auto-generated method stubString sql = DELETE FROM student WHERE id=? ;PreparedStatement pstmt = null ;DataBaseConnection dbc = null ;/ 下面是针对数据库的具体操作try/ 连接数据库dbc = new DataBaseConnection() ;pstmt = dbc.getConnection().prepareStatement(sql) ;pstmt.setString(1,id) ;/ 进行数据库更新操作pstmt.executeUpdate() ;pstmt.close() ;catch (Exception e)throw new Exception(操作出现异常) ;finally/ 关闭数据库连接dbc.close() ;public void insert(Student student) throws Exception / TODO Auto-generated method stubString sql = INSERT INTO student (id,name,sex,age) VALUES (?,?,?,?) ;PreparedStatement pstmt = null ;DataBaseConnection dbc = null ;/ 下面是针对数据库的具体操作try/ 连接数据库dbc = new DataBaseConnection() ;pstmt = dbc.getConnection().prepareStatement(sql) ;pstmt.setString(1,student.getId() ;pstmt.setString(2,student.getName() ;pstmt.setString(3,student.getSex() ;pstmt.setInt(4,student.getAge() ;/ 进行数据库更新操作pstmt.executeUpdate() ;pstmt.close() ;catch (Exception e)throw new Exception(操作出现异常) ;finally/ 关闭数据库连接dbc.close() ;public List queryAll() throws Exception / TODO Auto-generated method stubList all = new ArrayList() ;String sql = SELECT id,name,sex,age FROM student ;PreparedStatement pstmt = null ;DataBaseConnection dbc = null ;/ 下面是针对数据库的具体操作try/ 连接数据库dbc = new DataBaseConnection() ;pstmt = dbc.getConnection().prepareStatement(sql) ;/ 进行数据库查询操作ResultSet rs = pstmt.executeQuery() ;while(rs.next()/ 查询出内容,之后将查询出的内容赋值给person对象Student student = new Student() ;student.setId(rs.getString(1) ;student.setName(rs.getString(2) ;student.setSex(rs.getString(3) ;student.setAge(rs.getInt(4) ;/ 将查询出来的数据加入到List对象之中all.add(student) ;rs.close() ;pstmt.close() ;catch (Exception e)throw new Exception(操作出现异常) ;finally/ 关闭数据库连接dbc.close() ;return all ;public Student queryById(String id) throws Exception / TODO Auto-generated method stubStudent student= null ;String sql = SELECT id,name,sex,age FROM student WHERE id=? ;PreparedStatement pstmt = null ;DataBaseConnection dbc = null ;/ 下面是针对数据库的具体操作try/ 连接数据库dbc = new DataBaseConnection() ;pstmt = dbc.getConnection().prepareStatement(sql) ;pstmt.setString(1,id) ;/ 进行数据库查询操作ResultSet rs = pstmt.executeQuery() ;if(rs.next()/ 查询出内容,之后将查询出的内容赋值给person对象student = new Student() ;student.setId(rs.getString(1) ;student.setName(rs.getString(2) ;student.setSex(rs.getString(3) ;student.setAge(rs.getInt(4) ;rs.close() ;pstmt.close() ;catch (Exception e)throw new Exception(操作出现异常) ;finally/ 关闭数据库连接dbc.close() ;return student ;public List queryByLike(String cond) throws Exception / TODO Auto-generated method stubList all = new ArrayList() ;String sql = SELECT id,name,sex,age FROM student WHERE name LIKE ? or id LIKE ? ;PreparedStatement pstmt = null ;DataBaseConnection dbc = null ;/ 下面是针对数据库的具体操作try/ 连接数据库dbc = new DataBaseConnection() ;pstmt = dbc.getConnection().prepareStatement(sql) ;/ 设置模糊查询条件pstmt.setString(1,%+cond+%) ;pstmt.setString(2,%+cond+%) ;/ 进行数据库查询操作ResultSet rs = pstmt.executeQuery() ;while(rs.next()/ 查询出内容,之后将查询出的内容赋值给person对象Student student = new Student() ;student.setId(rs.getString(1) ;student.setName(rs.getString(2) ;student.setSex(rs.getString(3) ;student.setAge(rs.getInt(4) ;/ 将查询出来的数据加入到List对象之中all.add(student) ;rs.close() ;pstmt.close() ;catch (Exception e)throw new Exception(操作出现异常) ;finally/ 关闭数据库连接dbc.close() ;return all ;public void update(Student student) throws Exception / TODO Auto-generated method stubString sql = UPDATE student SET name=?,sex=?,age=? WHERE id=? ;PreparedStatement pstmt = null ;DataBaseConnection dbc = null ;/ 下面是针对数据库的具体操作try/ 连接数据库dbc = new DataBaseConnection() ;pstmt = dbc.getConnection().prepareStatement(sql) ;pstmt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 院感手卫生考试题及答案
- 家装促销活动策划方案
- 21、应用问题(三)教学设计-2023-2024学年小学数学四年级上册浙教版
- 2025年全球新能源汽车充电网络建设成本效益分析报告
- Unit12 I can swim(教学设计)-2023-2024学年北师大版(一起)英语一年级下册
- 第十八节 标题性交响曲的诞生教学设计-2025-2026学年高中音乐人音版必修 音乐鉴赏-人音版
- 广东省惠州市2024年中考地理 地球的公转说课稿
- 电视应急采访预案(3篇)
- 电气室应急预案(3篇)
- 2025年印刷技能大赛题库及答案
- 《洋务运动和边疆危机》【常规课件】
- 《发动机大修》课件
- 石英晶体谐振器分析与设计基础-宁波大学压电器件实验室
- 动物的精子与卵子的结构与功能
- 酒店宠物服务流程
- 外研社小学英语五年级上册单词表
- 初中英语单词词根记忆法全套
- 2024版网络安全网络攻击与防御技术实践演示培训
- 经济数学全套教学课件
- 1-食管支架置入护理
- 项目式学习的理论与实践探究
评论
0/150
提交评论