JDBC回顾
概述:
l JavaDataBase Connectivity Java数据库的连接
l sun公司提供的一套统一的接口规范
驱动:
l 两个硬件设备之间通信的桥梁,
JDBC开发步骤:
l 注册驱动
n Class.forName(“驱动名称”);
l 获取连接
n 通过DriverManager.getConnection(“数据库路径”,”数据库用户名”,”密码”);
l 获得执行sql语句对象,
n 定义sql语句
n 创建PreparedStatement对象,里面使用占位符?来代表需要传入的参数,set参数属性(第几个问号,参数值);
n 使用executeQuery()方法,和executeUpdate()方法来执行sql语句,返回结果集或者执行成功的记录条数
l 释放资源
n 连接的close()方法
使用单元测试替代main方法
l 可以直接通过结果颜色直观反映代码是否有误
l 一个类中可以测试很多方法
l 测试方法不可以有返回值,也不能有参数列表
l 注意事项:单元测试,红色什么时候出现
n 程序出现异常
n assert语句,期望和实际值不一样的时候
l 实例格式,
@Test
public void 方法名(){
方法体
}
QueryRunner 手动传入连接 必须手动关闭 若传入连接池 关闭资源的动作由连接池来执行
JDBC的API
l Connection
n createStatement():创建一个Statement对象将sql语句发送到数据库
n prepareStatement(Stringsql):创建一个prepareStatement对象将参数化的sql语句发送到数据库
l Statement
n excuteQuery(Stringsql):执行给定的sql语句,返回单个的ResultSet对象
n executeUpdate(Stringsql):执行给定的sql语句,内容可为增、删、改或不返回任何内容的sql语句
n execute(Stringsql)执行给定的sql语句,该语句可能返回多个结果
n 执行批处理
n addBatch(Stringsql):将给定的sql命令添加到此Statement对象的当前命令列表中
n clearBath():清空此Statement的sql命令列表
n executeBatch()将一批命令提交给数据库,若全部执行成功,则返回更新计数
自定义连接池
l 定义一个自定义连接池,需要先实现sun公司提供的接口(javax.sql.DataSource)
l 使用List集合存放多个连接的对象
还有一个适配器设计模式,和装饰者模式一同使用,解决需要重写的方法太多的问题
自定义连接池需要对连接的某些方法进行增强,有三种方法可以实现增强
1. 继承
i. 找到这个数据库驱动的实现类,继承它,在子类中重写它的某些方法,实现对它功能的增强,
ii. 缺点:是,通用性太差,一种数据库就需要有一个子类来增强
2. 使用装饰者模式
i. 装饰者模式 使用一个包装类来对数据库驱动的实现类进行包装,进而实现对这个实现类功能的增强
ii. 但由于我们只对这个类的某些功能进行增强,为了简化包装类的代码书写,使用适配器模式
JDBC的元数据MataData---编写通用性较强的代码
l DatabaseMetaData:获取数据库连接的信息,获得数据库表的信息
n 获得数据库元数据:Connection中getMateData();
l ParameterMetaData:获得sql中的参数的个数及类型
n 获得参数元数据:
l ResultSetMetaData:获得结果集中的列名及类型
XML—可扩展标记语言
l 设计总之是传输数据,而不是显示数据
l xml中标签没有被预定义,需要用户自行定义
l 具有自我描述性
l w3c推荐标准
XML的作用
l 传输和存取数据
l 软件的配置文件
XML的使用
l XML的语法
n xml的文档声明
u 文档声明:必须在xml的第一行第一列
u 写法:
l <?xml 属性名=”属性值” 属性名=”属性值” ..?>
n version :版本号.必须要有的.使用”1.0”
n encoding:字符集.浏览器打开时采用的编码集
n standalone:描述xml文档是否需要依赖其他的文件.没什么用的属性 属性值:yes or no
n xml的注释
u <!---->
n xml的属性
u
n xml的元素
u 命名规则
l 可包含字母、数字和其他字符
l 不可以数字或者标点开头
l 不能以xml开头,大小写都不可以
l
n xml的特殊字符和CDATA区
u <--- <
u >--- >
u &--&
u '--
u "
XPath:
l dom4j支持XPath的jar包
l dom4j支持的XPath支持的API:
n Listdocument.selectNodes(String xPath);
n Nodedocument.selectSingleNode(String xPath);
XML的约束
l 用来约束文档中标签的类型,顺序,次数
l 用来规范XML的写法
l 分类和区别
n 分类
u DTD :
l DTD的语法是自成一体的
u Schema :
l Schema的语法是XML的语法,更容易被解析器解析
l Schema支持名称空间
l 比DTD更强大的语义和语法的约束
n DTD的语法
u 引入方式
l 内部引入
l 外部引入
n 本地引入
n 网络引入
n Schema的语法
Tomcat
l 软件架构
n c/s架构:
u Client/Server客户端和服务器端的软件,需要pc端安装的软件,例:QQ
u 优点:效果好,客户体验好,因为部分代码写到客户端所以速度较快
u 缺点:服务端更新,客户端都需要更行
n b/s架构:
u Browser/Server浏览器端和服务器端的软件,不需要安装软件,有浏览器即可,例:京东,淘宝,WEBQQ
u 优点:服务器更新,客户端浏览器不需要更新,
u 缺点:效果比不上客户端软件,所有代码运行在服务器,服务器压力过大
l 效果:使用HTML5,CSS3可以做出炫的效果
l 服务器端压力:搭建服务器的集群,而且还有AJAX技术
l http协议
n 协议:规定双方需要遵守的规则.
n HTTP协议:
u 用来规定浏览器和服务器之前需要遵守的规则
n http的协议的作用:
u 基于请求和响应的模型
u 请求和响应必须成对出现.
n 默认的端口号是80
l http协议的版本
n 1.0 :每次响应后即刻关闭公司
n 1.1 :现在使用,不是立刻挂断等后面看看还会不会有请求
l http协议的详解
n 请求部分
u 请求行
l 请求方式
n GET和POST
u GET的提交的参数会显示在地址栏上,而POST不显示
u GET的提交有大小限制,POST没有大小限制
u GET没有请求体,POST有请求体
l 提交路径:
l 协议版本:1.0
u 请求头
l 都是键值对的形式显示的,一般一个key对应一个value,也个别的是一个key对应多个value.
l User-Agent :代表浏览器的类型.---文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码
l Referer :代表网页的来源------防盗链
l If-Modified-Since: 寻找本地缓冲,可以提高运行速度
n 响应部分
u 响应行
l 协议版本
l 状态码
n 200 :成功
n 302 :重定向
n 304 :查找本地缓存
n 404 :资源不存在
n 500 :服务器内部错误
l 状态码描述
u 响应头:键值对,一个key对应一个value,个别一个key对应多个value
l Last-Modified :与请求中的If-Modified-Since一起使用查找本地缓存
l Content-Dispostion:文件下载时使用的一个头信息
l Location :
l Servlet
n 概述:运行在WEB服务器上小的Java程序,用来接收和响应客户端发来的请求,通常使用HTTP协议
n Servlet:sun公司提供的一个动态页面开发技术
n 使用:
u 编写实现类实现Servlet接口
u 将编写的类配置到服务器中
n 使用ServletRequest接受参数
u StringgetParameter(String name):接受一个名称对应一个值得数据
u String[]getParameterValues(String name):用于接受一个名称对应多个值得数据
u MapgetParameterMap(); :用于接受表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值
l Servlet的实现关系
n Servlet :接口
|
GenericServlet :通用的Servlet
|
HttpServlet :专门处理http请求的Servlet
n 编写一个类继承Servlet,重写doSet和doPost方法
l Servlet的生命周期
n 生命周期:一个对象从创建到销毁的过程.
n Servlet生命周期:Servlet从创建到销毁的过程
u 用户第一次访问Servlet创建Servlet的实例
u 当项目从服务器中移除的时候,或者关闭服务器的时候
n 用户第一次访问的时候,创建唯一的一个Servlet的实例,Servlet的init()方法就会执行.任何一次请求服务器都会创建一个新的线程
l Session概述
n Cookie本身有大小和个数的限制,Session没有限制,Cookie的数据保存在客户端,Session保存在服务器端
n 执行原理:基于Cookie,使用Cookie把用户的Session标识存入客户端,在使用Cookie把用户标识传回服务器用于打开Session空间
n 使用
u request.getSession()如果携带的Cookie有JSESSIONID的话就会打开这个区域,如果没有则创建
步骤