1、目的:学习Servlet、面向接口编程、工厂模式
2、开发环境:Ecplise(Java SE)、SQLyog数据库管理工具、Tomcat服务器
3、Tomcat安装要注意环境变量的设置
4、Ecplise项目中导入jar包:Window->Preferences->Java->Build Path->User Libraries->new->命名,如MyWebLib->点击MyWebLib,点击Add External JARs->导入Tomcat的lib目录下的servlet-api.jar和jsp-api.jar,再导入MySQL驱动包
5、添加导航器:Window->Show View->Navigator
6、构建工程(项目)目录结构——包设计
根据系统分层体系结构,我们可以设置
1)ui/WebRoot包:对应表现层,在这节课的例子中暂时不用
2)controller包:对应控制层,负责协调、调度业务逻辑层的功能方法。业务逻辑层提供的方法也许只是相对独立的基本功能,如果某项操作需要按一定顺序调用好几个基本的业务功能,控制器就能起到协调、调度的作用。在 JavaWeb应用中,Servlet通常就是承担控制器的作用。
3)business/service包:对应业务逻辑层,提供完成各项业务功能的方法。
4)dao 包:对应数据访问层,提供访问数据资源(如数据库、文件等)的方法。
5)entity/vo/pojo包:对应 Model层,实体类/值对象(ValueObject)/简单 Java对象(Plain Ordinary Java Object),封装了需要处理的业务数据,采用 JavaBean-style 定义
6)common包:通常是较底层的公共的服务(工具)类,比如特殊字符处理,数据源连接等。
7、分层设计——从底向上
新建工程时,将bin目录改名为classes
(一)、定义 entity类(JavaBean-style)
1)每个属性的访问权限都是 private
2)为每个属性提供 public的 setter和 getter
3)必须有不带参数的构造方法
/**
* entity包,对应Model层,简单Java对象
*/
package edu.gdut.imis.library.entity;
/**
* Book的实体类,封装了我们要处理的数据,采用JavaBean style来定义
*
* @author PC
*
*/
public class BookModel {
private String isbn; // 图书的分类编码
private String name; // 图书名称
private String author; // 图书作者
private float price; // 图书价格
public BookModel() {
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
(二)、编写脚本在数据库中创建关系表
DROP DATABASE IF EXIST Library;
CREATE DATABASE Library;
USE Library;
CREATE TABLE Book_info(
isbn varchar(13) not null primary key,
name varchar(30) not null,
author varchar(20) not null,
publisher varchar(50) not null,
price float(6,2)
);
COMMIT;
(三)、在 common中定义连接数据库的公用类
/**
* common包,通常是较底层的公共的服务(工具)类,比如特殊字符处理,数据源连接等
*/
package edu.gdut.imis.library.common;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* 连接数据库和应用程序
* @author PC
*
*/
public class DBConnector {
//返回数据库的连接对象
public static Connection getConn() throws SQLException{
/**
* 通过DriverManager得到数据库的连接对象,要用URL描述要连接的数据库
*/
//主协议jdbc:次要协议mysql://连接本地主机:默认的端口号3306/要连接的数据库名称
String url="jdbc:mysql://localhost:3306/library";
//用户名
String username="root";
//密码
String password="123456";
//加载驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//通过DriverManager得到数据库的连接对象
Connection conn=DriverManager.getConnection(url,username,password);
//返回数据库的连接对象
return conn;
}
}
(四)、定义 DataAccessObject
1)定义 dao 包中的子包
idao:dao 接口
factory:dao 工厂,用于返回 dao 接口的实现类
impl:dao 接口的实现类
2)定义 dao 接口
/**
* dao包,对应数据访问层,提供访问数据资源(如数据库、文件等)的方法
*/
package edu.gdut.imis.library.dao.dai;
import java.util.List;
import edu.gdut.imis.library.entity.BookModel;
/**
* dao接口
* @author PC
*
*/<