资源描述
第六课 Java Web 开发技术
王俐之
北京师范大学信息科学与技术学院
wanglizhi@
主要内容
Java数据库连接(JDBC)
JavaBean 实现
MVC开发模式
JDBC
JDBC (Java DataBase Connectivity)是用于执行SQL语句的Java应用程序接口,由一组用Java语言编写的类与接口组成。
JDBC是一种规范,它让各数据库厂商为Java程序员提供标准的数据库访问类和接口,这样就使得独立于DBMS的Java应用程序的开发工具和产品成为可能。
JDBC
JDBC的工作就是负责在Web中操作数据库,而不必进入具体的数据库管理系统中。JDBC的用途可以归纳为以下三项:
与数据库建立连接;
向数据库管理系统发送SQL语句;
操作数据库,处理数据库返回的结果。
JDBC应用程序接口
JDBC被描述成为一组抽象的Java接口:
java.sql.DriverManager:处理驱动的调入并且对产生新的数据库连接提供支持。
java.sql.Connection:代表对特定数据库的连接。
java.sql.Statement:代表一个特定容器,对一个特定数据库执行SQL语句。
java.sql.ResultSet:控制对一个特定语句的行数据存取。
java.sql.PreparedStatement:用于执行预编译的SQL语句。
数据库连接
1、加载驱动程序:
根据采用的后台数据库选择和加载相应的驱动程序:
(1)调用方法Class.forName
最常用的加载驱动程序方法,目前Web设计多采用此方法,其语法格式为:
Class.forName(“驱动程序类”).newInstance();
例如:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”). newInstance();
数据库连接
(2)通过registerDriver方法注册
这种方法通过调用DriverManager类的registerDriver方法实现的,其语法格式为:DriverManager.registerDriver(new 驱动程序类());
如:DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver ());
数据库连接
2、建立连接
驱动程序加载后,由java.sql.DriverManager类继续负责与数据库建立连接,调用getConnection()方法建立连接。
Connection 连接名=DriverManager.getConnection(URL,”userid”,”password”);
userid和password分别为:数据库的用户名和密码。
数据库连接
2、建立连接
JDBC中的URL提供了一种标示数据库的方法,标准语法如下:
jdbc:<子协议>:<子名称>
<子协议>:表示驱动程序名或数据库连接机制。
<子名称>:一种标识数据库的方法,依据不同的子协议而变化。例如:
jdbc:microsoft:sqlserver://127.0.0.1:1443;DatabaseName=pubs
表示“microsoft”子协议,子名称为sqlserver://127.0.0.1:1443;DatabaseName=pubs
数据库是Microsoft公司的SQL Server数据库,地址在本机的1443号端口,数据库名称为pubs。
JDBC和JDBC/ODBC解决方案
JDBC的使用
装载驱动程序
装载驱动程序只需要非常简单的一行代码。如果想要使用JDBC/ODBC桥驱动程序,可以用下列代码装载它:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
建立连接
第二步就是用适当的Driver类与DBMS建立一个连接。下列代码是一般的做法:
Connection con = DriverManager.getConnection(url, "Login", "Password");
JDBC的使用(2)
查询数据库
为了下面的演示,我们使用Microsoft Access编辑刚刚建立的数据源javadb.使用设计向导创建一个名为student的表接着输入一些测试数据。
编写JDBC程序一般步骤
①加载驱动程序
Class.forName(driverClass);
②获得jdbc 连接
Connection con = DriverManager.getConnection(url);
③创建Statement对象
Statement stmt = con.createStatement();
④得到查询结果集或者执行update等操作
ResultSet rs = stmt.executeQuery("select * from student");
⑤关闭数据库连接
try {
con.close();
} catch (Exception e) {
}
JDBC示例代码
public class JDBCDemo {
public static void main(String[] args) {
String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:javadb";
String[] columnNames = new String[]{"studentno", "lastname", "firstname", "gender", "birthday"};
String[] displayNames = new String[]{"学号", "姓", "名", "性别", "生日"};
try {
//①加载驱动程序
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
//驱动程序加载不成功,打印错误信息并退出
System.out.println("Can not find driver " + driverClass);
System.exit(-1);
}
Connection con;
JDBC示例代码(2)
try {
//②获得jdbc 连接
con = DriverManager.getConnection(url);
//③创建Statement对象
Statement stmt = con.createStatement();
//④得到查询结果集
ResultSet rs = stmt.executeQuery("select * from student");
//打印表头
for (int i = 0; i < displayNames.length; i++) {
System.out.print(displayNames[i] + "\t");
}
System.out.println();
//列印结果集
while (rs.next()) {
for (int i = 0; i < columnNames.length; i++) {
System.out.print(rs.getString(columnNames[i]) + "\t");
}
System.out.println();
}
stmt.close();
JDBC示例代码(3)
} catch (SQLException sqe) {
sqe.printStackTrace();
} finally {
//⑤关闭数据库连接
try {
con.close();
} catch (Exception e) {
}
}
}
}
JavaBean
JavaBean概述
JSP与JavaBean的结合
JavaBean的生命周期
使用JavaBean访问数据库
JavaBean案例
17
1、JavaBean简介
JavaBean组件本质上就是一个按照标准格式编写的Java类,只不过这个类要遵循一些编码的约定。在JSP中,既可以像使用普通类一样实例化JavaBean类的对象,调用它的方法,也可以利用技术中提供的动作元素来访问JavaBean。
JavaBean概述
18
1、JavaBean简介
通常而言,一个标准的JavaBean应该有以下几项特性:
(1)JavaBean是一个公开的(Public)类;
(2)JavaBean类必须是拥有一个零参数的(默认)构造函数;
(3)设置或获取JavaBean属性时,必须使用getXXX()方法或setXXX()方法。
6.1 javaBean概述
19
2、JavaBean属性的命名
给每一个属性添加get和set方法 ,其中属性名字的第一个字母大写,然后在名字前面相应地加上“get”和“set”。如果一个属性只有get方法或只有set方法,那么这个属性就是一个只读或只定的属性。如:
Public String getName()
Public void setName(String name)
6.1 javaBean概述
20
3、JavaBean示例:TeacherInfo.java
public class TeacherInfo{
private String teacherId,teacherName;
//get方法
public String getTeacherId()
{ return this.teacherId; }
public String getTeacherName()
{ return this.teacherName; }
//set 方法
public void setTeacherId(String s)
{this.teacherId=s;}
public void setTeacherName (String s)
{this.teacherName=s;}
}
6.1 javaBean概述
21
要想在JSP 程序中使用JavaBean 组件,我们可以应用
<jsp:useBean><jsp:setProperty> <jsp:getProperty>等 JSP 标签来进行相关联。
6.2 Jsp与javaBean结合
22
1、创建JavaBean:<jsp:useBean>
<jsp:useBean>这个标签用以载入将要用在JSP页面中的javaBean,它会在JSP 页面中实例化一个JavaBean 组件对象。<jsp:useBean>的基本语法形式如下所示:
<jsp:useBean id="name" class = "className" scope = "page|request|session|application" type = "tyepName" />
id 属性用来设定JavaBeans 的名称,利用id 可以识别在同一个JSP 程序中使用的不同的JavaBeans 组件实例;
class 属性指定JSP 引擎查找JavaBeans 代码的路径,一般是这个JavaBean 所对应的Java 类名;
scope 属性用于指定JavaBeans 实例对象的生命周期,亦即这个JavaBean 的有效作用范围,scope 的值可能是page、request、session 以及application,
type 属性主要用来控制所要声明的变量的类型是实际BeanJava类型的超类,或是JavaBean实现的接口。
6.2 Jsp与javaBean结合
23
2、简单JavaBean属性的设置:<jsp:setProperty>
创建或获得JavaBean之后,就可以使用<jsp:setProperty>来设置它的属性。<jsp:setProperty> 操作指令被用于指定 JavaBeans 的某个属性的值它的语法形式如下所示:
<jsp:setProperty name="BeanName" property="PropertyName“ value="PropertyValue“|
param="ParameterName“>
name 属性用来指定JavaBeans 的名称,这个JavaBeans 必须首先使用<jsp:useBean>标签来实例化;
property 属性被用来指定JavaBeans 需要赋值的属性的名称;
若property=“*”,匹配所有的JavaBean属性值,并给予赋值value.
value 属性的值将会被赋给JavaBeans 的属性;
param 这个属性的作用很微妙,如果客户端传递过来的参数中有一个参数的名字和param 属性的值相同,那么这个参数的值将会被赋给JavaBean 的属性。不能同时使用param和value标签。
6.2 Jsp与JavaBean结合
24
3、访问 JavaBean: <jsp:getProperty>
如果要获得JavaBean中的属性值,我们可以使用jsp:getProperty来输出它的属性,它的语法形式如下所示:
<jsp:getProperty name=”BeanName” Property=”PropertyName” />
语法参数说明
name 这个属性用来指定JavaBeans 的名称,这个JavaBeans 组件对象必须已经使用<jsp:useBean>标签实例化了。
Property属性用来指定要读取的JavaBeans 组件对象的属性的名称
6.2 Jsp与javaBean结合
25
4、设置 JavaBean 属性高级技术
JSP允许我们将所有的属性与同名的请求参数自动关联起来。我们可以通过把property参数的值设为”*”,如:
<jsp:setProperty name="myBean" property="*" />
当使用上述语句时,JSP自动将所有的属性与同名的请求参数进行匹配关联。
6.2 Jsp与javaBean结合
26
4、设置 JavaBean 属性高级技术
尽管以上方式比较简单,但使用中要注意以下三个方面:
(1)当输入参数缺少时不采取任何动作;
(2)自动类型转换并不能像手动类型转换那样能够防止不合法的值;
(3)JavaBean属性的名称和请求参数大小写敏感。
6.2 Jsp与javaBean结合
27
对于JSP而言,JavaBean 组件不仅可以封装许多信息而且还可以将一些数据处理的逻辑隐藏到JavaBean 的内部。除此之外我们还可以设定JavaBean 的Scope属性,使得JavaBean 组件对于不同的任务具有不同的生命周期和不同的使用范围。
6.3 JavaBean的生命周期
28
1、Page范围的JavaBean
使用<jsp:useBean>标签时,当JavaBean的范围设为Page,则表示将JavaBean放在PageContext对象中,即这个JavaBean的生命周期只在一个页面中,你只能在本网页内部去存取利用它。如果程序涉及到其他页面时,些时jsp容器会自动释放其内存,结束其生命周期。
如果没有指定JavaBean的scope时,则Container范围的默认值为Page。
6.3 JavaBean的生命周期
29
1、Page范围的JavaBean
使用<jsp:useBean>标签时,当JavaBean的范围设为Page,则表示将JavaBean放在PageContext对象中,即这个JavaBean的生命周期只在一个页面中,你只能在本网页内部去存取利用它。如果程序涉及到其他页面时,些时jsp容器会自动释放其内存,结束其生命周期。
如果没有指定JavaBean的scope时,则Container范围的默认值为Page。
6.3 JavaBean的生命周期
30
2、Request范围的JavaBean
使用<jsp:useBean>标签时,当JavaBean的范围设为request,则表示将JavaBean放在Request对象中,即在当前Request的处理期间都能够使用。
它的存取范围除了整个网页之外,当使用<jsp:include>或<jsp:forward>标签时,被include或是forward的网页,亦可以存取到原来网页所产生的JavaBean。
6.3 JavaBean的生命周期
31
3、Session范围的JavaBean
如果一个JavaBean 的Scope 属性值为session 那么这个JavaBean 组件的生命周期作用范围就和JSP 的Session 对象的生命周期作用范围一样,也就是说这一类型的JavaBeans 组件的生命周期就是某个会话过程所经历的时间。
6.3 JavaBean的生命周期
32
4、application范围的JavaBean
如果JavaBeans 的Scope 属性被指定为application, 也就是说这个JavaBean 组件具有Application生命周期,它的生命周期和JSP 的Application对象同步,作用范围也和Aplication 对象一样。
使用这种类型的JavaBean组件可以在多个用户之间共享全局信息。
具体来说,如果某个JSP 程序使用<jsp:useBean>操作指令创建了一个scope为Application的JavaBean 对象,那么这个JavaBean就一直在服务器的内存空间中待命,随时处理客户端的请求,直到服务器关闭为止它所保存的信息才消失,它所占用的系统资源才会被释放。
6.3 JavaBean的生命周期
33
5 、根据条件创建JavaBean
如果我们创建JavaBean组件时,需要执行一些特殊语句,这些语句只需在JavaBean创建时执行,如JavaBean初始化的一些设置,那么我们也可以使用如下形式来实现:
<jsp:useBean …> ……</jsp:useBean>
jsp:useBean的起始标签和结束标签的语句只在创建新的JavaBean时执行,如果使用已有的JavaBean,则不执行。
由于jsp:useBean默认构造函数并没有参数,所以我们经常需要在JavaBean创建之后修改它的属性,即在首次创建时执行这些修改。
6.3 JavaBean的生命周期
34
在访问数据库时, 使用这种结构可使JSP页面中只需要嵌入少量的Java代码甚至不使用Java代码, 可重用对数据库进行处理的JavaBean, 方便调试。
并且将对数据库的操作封装在JavaBean中,使得数据库的地址、登录用户名和密码等信息都封装在应用程序中, 用户JSP页面中没有任何对数据库操作进行访问的源代码, 从而提高了应用程序的安全性.
6.4 使用JavaBean访问数据库
35
1、用JavaBean封装数据库访问
加载驱动程序;
如:调用Class.forName()方法来载入一个JDBC驱动程序
建立数据库连接 ;
我们可以通过DriverManager类的getConnection()方法来建立一个数据库连接
数据操作
与建立数据库连接后,就可以利用这个连接对象的createStatement()方法来创建SQL 语句对象Stat进行数据操作
关闭数据库
因为数据库连接是系统宝贵资源,因此在数据库操作完毕后应及时地释放数据库连接
2、 在JSP页面中使用JavaBean组件进行数据库操作
6.4 使用JavaBean访问数据库
36
MVC设计模式
1、MVC设计模式
什么是设计模式
MVC设计模式
2 、JSP Model1和JSP Model2
JSP Model1
JSP Model2
1、 MVC设计模式
1.1 什么是设计模式
设计模式(Design pattern)是对于某些常见问题抽象提炼出来的解决方案。
软件设计模式使人们可以更加简单方便的复用以往成功的软件设计经验和体系结构,将已经被证实为有效的软件技术用设计模式进行表述也将会使新来的开发者更加容易理解其原来的设计思路,减少沟通成本和误解。
1 、MVC设计模式
1.2 MVC设计模式
(1)MVC设计思想
MVC是把一个应用的输入、处理、输出流程按照模型、视图、控制的方式进行分离,这样应用被分为三个层:模型层、视图层、控制层。
模型层(Model):负责表达和访问商业数据,执行业务逻辑和操作。
视图层(View):把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。
控制层(Control):定义了抽象的业务逻辑,用于控制业务流程。
1 、MVC设计模式
(2) MVC的实现
图 8.1 GUI程序中的MVC
1 、 MVC设计模式
(2) MVC的实现
图 8.2 web应用中的MVC
2、 JSP Model1和JSP Model2
2.1 JSP Model1
对于小型的web应用程序,我们可以直接使用JSP来编写动态网页,网页中的动态内容通过插入一些JSP中脚本代码来实现,这种方式写程序最为简单、快捷。
这样做也使得我们的JSP页面中大量混合了HTML和JAVA代码,应用程序变得难以读懂和维护。
在页面中加入Java Bean在一定程度上可以解决这种问题,我们可以使用Java Bean将复杂的商务逻辑封装进来,这种方法我们称之为JSP Model1。
图 8.3 JSP Model1结构图
2 、JSP Model1和JSP Model2
2.1 JSP Model1
2、 JSP Model1和JSP Model2
2.2 JSP Model2
在JSP Model1设计模式中,JSP页面还是必须调用一定的业务逻辑,而且JSP页面还承担起控制页面流向的重要角色,所以在JSP Model1中将不可能消除页面中存在的程序代码。
为了解决JSP Model1存在的上述问题,我们引入了MVC体系,也就是我们所说的JSP Model2。
图 8.4 JSP Model2结构图
2 、JSP Model1和JSP Model2
2.2 JSP Model2
展开阅读全文