本帖最后由 小石姐姐 于 2018-5-23 15:59 编辑
JDBC事务管理
核心思想:业务逻辑的操作要使用同一个Connection对象
Connection管理事务API
setAutoCommit(boolean) //设置是否自动提交事务(默认true)。设置为false,后面的execute不会自动提交,相当于开启事务,需手动提交
commit() //提交
rollback() //回滚
rollback(Savepoint) //回滚到还原点
Savepoint setSavepoint() //设置还原点
连接池
连接池:只对Connection进行操作。对连接close()方法增强,不会销毁,归还给连接池
Druid
阿里旗下开源连接池产品,使用非常简单,可以与Spring框架进行快速整合。
使用:
1.导入jar包
2.加载连接数据库的配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("文件路径"));
3.获取连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
4.获得连接
Connection conn = dataSource.getConnection();
C3P0
使用:
//1.导入jar包,配置文件
//2.创建连接池,默认去类路径下(classpath)查找c3p0-config.xml
ComboPooledDataSource dataSource = new ComboPooledDataSource(["指定配置名字"]]);
// 3.从连接池中获得连接
Connection conn = dataSource.getConnection();
配置文件:c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///web_test4</property>
<property name="user">root</property>
<property name="password">123</property>
</default-config>
</c3p0-config>
DBCP
//需依赖.pooljar包
BasicDataSource 连接池
//必须设置项(数据库连接信息)
setDriverClassName("com.mysql.jdbc.Driver"); //设置数据库驱动
setUrl("jdbc:mysql://localhost:3306/mybase"); //设置数据库地址
setUsername("root"); //设置用户名
setPassword("123"); //设置密码
//基本项(扩展)
initialSize 初始化连接,第一次启动时放入的连接数
maxActive 最大连接数量
minIdle 最小空闲连接
maxIdle 最大空闲连接
//获取连接对象
getConnection()
DBUtils
DBUtils :封装并简化JDBC,不影响性能。
QueryRunner 类。核心运行类
//一般执行CRUD操作
(DataSource) //自动事务,自动提交,自动释放资源
int update(String sql,Object… args); //增删改
T query(String sql,ResultSetHandler<T> rsh,Object… params) //查。T为封装的对象类型
//有事务的CRUD操作
() //手动事务
int update(Connection conn,String sql,Object… params)
T query(Connection conn,String sql,ResultSetHandler rsh,Object… params)
//批处理
int[] batch(Connection conn,String sql,Object[][] params)
int[] batch(String sql,Object[][] params)
DbUtils 工具类
closeQuietly(连接等); //安静的关闭
//事务操作
commitAndCloseQuietly(Connection conn) //提交并安静的关闭,自动处理异常
rollbackAndCloseQueitly(Connection conn)
ResultSetHandler<T> 接口。结果集处理
实现类:
BeanHandler<T>(Class type) //将结果集第一条记录封装到一个指定的javaBean中。没有返回null
返回 T
BeanListHandler<T>(Class type) //将结果集每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
返回 List<T>
MapHandler() //将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
返回 Map<String, Object>
MapListHandler() //将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
返回 List<Map<String,Object>>
ScalarHandler() //单值封装。如:select count(*) from 表操作(会返回long类型)。
返回 数值会返回long
ArrayHandler() //将结果集第一条记录封装到Object[]数组中。没有返回长度0数组
返回 Object[]
ArrayListHandler //将结果集每一条记录都封装到一个Object[]数组中,再将这些数组在封装到List集合中。
返回 List<Object[]>
ColumnListHandler<Object>(String columnName) //将指定的列封装到一个List集合中
返回 List<Object>
KeyedHandler("列名作为外层key")
返回 Map<Object,Map<String,Object>>
XML
概述:XML(Extensible Markup Language) 可扩展标记语言:允许自定义标签。最原始标签类型语言,应用于配置文件。由W3C组织(World Wide Web Consortium 万维网联盟)发布,目前遵循2000年发布的XML1.0规范。
设计宗旨:描述数据,传输和存取数据
作用:软件的配置文件。辅助Tomcat服务器,定位用户访问的java程序
语法
基本语法:
- 区分大小写
- 只允许有一个根标签
- 标签必须闭合
- 特殊字符需转义
元素命名:
- 可以包含字母、下划线、数字、减号、英文句点
- 严格区分大小写
- 只能字母或下划线开头
- 不能以xml(XML、XML等)开头。W3C保留日后使用
- 名称字符之间不能有空格或制表符
- 名称字符之间不能使用冒号(有特殊用途)
文档声明:必须在第一行第一列
1.<?xml version="1.0" encoding="UTF-8"?>
encoding:字符集。使用浏览器打开时采用的字符集
2.处理指令(PI,Processing Instruction):用来指挥软件如何解析XML文档
<?xml-stylesheet type="text/css" href="xxx.css" ?>
注释:只能写在文档声明的后面
<!-- 注释 -->
元素(标签)、属性
<根标签>
<子标签 属性名="属性值"></子标签> //包含标签体
<子标签 属性名="属性值"/> //不包含标签体
</根标签>
特殊字符
& &
< <
> >
" "
' '
CDATA区(Character Data):该区域字符不被解释和解析,保证数据原样输出
<![CDATA[ 内容 ]]>
XML解析
解析方式:
1. sax(Simple Api for XML):事件驱动的方式,逐行解析
优点:如果文档特别大,不会导致内存溢出
缺点:不能对XML进行增删改操作,只能查
2. dom(Document Object Model):一次性将文档加载到内存,形成树型结构
优点:可对XML进行增删改查操作
缺点:如果文档特别大,容易导致内存溢出
解析技术:
dom4j:开源组织,hibernate底层采用(常用)
JDOM:开源组织,dom4j兄弟
JAXP:sun公司,支持DOM和SAX的API
pull:应用Android手机端解析XML
jsoup:一种处理HTML特定解析开发包
XML约束
作用:用来规范XML的写法
分类:
- DTD:语法是自成一体的
- Schema:语法就是XML的语法,更容易被解析器所解析;支持名称空间;有比DTD更加强大的语义和语法的约束
DTD约束
DTD(Document Type Definition) 文档类型定义:文件扩展名dtd
一个XML只能引入一个DTD约束文档
语法:
引入方式
1.内部DTD
<!DOCTYPE 根元素名 [
]>
2.外部DTD
本地DTD:<!DOCTYPE 根元素名 SYSTEM "DTD文档路径">
网络DTD:<!DOCTYPE 根元素名 PUBLIC "//UNKNOWN/" "DTD文档的URL">
元素:<!ELEMENT 元素名 元素类型>
元素类型:
EMPTY 用于指示元素的主体为空。比如:<br/>
(#PCDATA) 指示元素的主体内容只能是普通的文本
ANY 用于指示元素的主体内容为任意类型
(子元素) 指示元素中包含的子元素
是否有序: 使用 逗号(,)或者竖线(|)表示.
出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
属性:<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
属性的类型:
ID类型:表示属性值需要是唯一的.
CDATA类型:普通的字符串.
枚举
属性的约束:
#REQUIRED 属性是必需的
#IMPLIED 属性不是必需的
#FIXED value属性值是固定的
Schema约束
文件自身就是一个XML文档,扩展名为 xsd
XML Schema约束文档通常称之为模式文档(约束文档);遵循约束xml文件称之为实例文档
一个XML可以引入多个Schame约束文档
服务器
概述:服务器从硬件和软件两个方面说:
硬件:指的就是一台配置很高的计算机。
软件:需要在这台电脑上安装服务器软件。这台电脑称为web服务器
常见web服务器(中间件)
weblogic, BEA,Oracle收购 大型,收费,支持javaEE所有规范
webspere(was),大型,收费,支持javaEE所有规范
Tomcat,中小型,免费,支持servlet和jsp规范
Tomcat服务器
- 下载:官网下载,常用7
.tar | .tar.gz linux系统
.zip | .ext window系统
- 安装:解压即可,英文目录下
- 启动:Tomcat/bin/startup.bat
查看是否启动成功:浏览器打开http://localhost:8080
- 退出:
关闭窗口
ctrl+c
双击 shutdown.bat
常见问题
1. 启动时一闪而过。正确配置:JAVA_HOME
2. 端口冲突问题。修改Tomcat端口号
- 一:将占用端口的应用结束
查看程序占用的端口:netstat -ano
根据PID打开任务管理器干掉
- 二:修改自身的端口号。
tomcat/conf/server.xml。(70行左右)
<Connector port="8080" protocol="HTTP/1.1"
3. 环境变量中配置CATALINA_HOME,会启动同一个Tomcat。删除
目录结构
- bin:tomcat执行文件
- conf:tomcat 配置文件
- lib :Tomcat运行时需要的jar包
- logs:运行日志文件
- temp:临时文件
- webapps:发布web项目路径
- work:tomcat运行JSP的时候,JSP翻译成Servlet的代码,Servlet再被编译成class文件
项目发布(虚拟目录的映射)
方式一:项目直接放到tomcat/webapps下(了解)
方式二:配置 tomcat 虚拟路径(核心配置文件不推荐修改)
tomcat/conf/server.xml 中:
<Host> 标签中添加:
<Context path="/虚拟路径" docBase="项目磁盘目录" />
path:虚拟路径用于浏览器访问
docBase:项目所在的真实磁盘目录
方式三:配置 tomcat 虚拟路径(官方推荐)
tomcat/conf/Catalina/localhost/xxx.xml
xxx:虚拟路径的名称用于浏览器访问
文件中写入配置:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="项目磁盘目录" />
(开发)打成war包。将war包放入tomcat/webapps下,当服务器启动时,会自动解压到当前目录。
Servlet
概述
servlet:运行在WEB服务器上的小的Java程序,用来接收和响应客户端发送过来的的数据,通常使用HTTP协议。就是SUN公司提供的一个动态WEB开发技术。
作用:用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
使用配置
1. 编写一个类实现Servlet接口,重写service() 方法
1. 将这个类配置到服务器中(web-inf/web.xml)
//配置servlet
<servlet>
<servlet-name>Servlet名称(任意,用于关联映射)</servlet-name>
<servlet-class>Servlet全类名</servlet-class>
//配置服务器启动时就创建Servlet,1留给虚拟机用,越小越优先
//思想:有一些资源初始化很耗时,第一次访问时初始化资源(耗时)以后访问都无需初始化。
// 可以这样配置。把耗时的操作放在服务器启动的时后
<load-on-startup>2</load-on-startup>
//配置初始化参数,可多个
<init-param>
<param-name>键</param-name>
<param-value>值</param-value>
</init-param>
</servlet>
<servlet-mapping> //绑定路径,Servlet的映射
<servlet-name>Servlet名称</servlet-name>
//Servlet的访问路径(自定义)
<url-pattern>/hello</url-pattern>
</servlet-mapping>
//配置session过期时间
<session-config>
<session-timeout>30</session-timeout>
</session-timeout>
//配置全局错误页面,可多个
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
url-pattern三种配置方式
1.完全路径匹配:以 / 开始。如:/servlet/aaa/ccc
2.目录匹配:以 / 开始,以 * 结束。如: /* ,/aaa/* ,/aaa/bbb/*
3.扩展名匹配:以 * 开始的。如: *.do , *.action
优先级:完全路径匹配 > 目录匹配 > 扩展名匹配
1. 访问原理:根据<url-pattern>的路径访问,根据<servlet-name>找到对应的<servlet-class>,再找到Servert类,服务器调用service()方法
2. 导入jar包:直接放入 WEB-INF 下,无需BuildPath
路径问题
- 相对路径:不能 / 开头,找位置相对关系
./ 或 不写 表示当前路径
../ 表示上一级路径
- 绝对路径:以 / 开始的
- 客户端路径:客户端访问服务器时一定要加工程名
- 服务器端路径:服务器中文件之间的访问,可以不需要加工程名
Servlet 接口
init()|(ServletConfig config) //初始化。服务器开启第一次访问时执行一次
service(ServletRequest request,ServletResponse response) //服务,处理业务逻辑。每请求一次,服务器创建一个线程,执行一次
destroy() //销毁。servlet被移除或服务器正常关闭时执行一次
//获取当前servlet的配置对象
ServletConfig getServletConfig()
//获取当前项目ServletContext对象
ServletContext getServletContext()
GenericServlet 抽象类
除了service方法没有显示,其他都实现了
HttpServlet 抽象类
service做了实现,把参数强转,调用了重载的service方法
重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
Servlet生命周期
默认用户第一次访问Servlet时,服务器会创建这个Servlet实例,并执行init()初始化方法。
任何一次请求服务器都会创建一个线程执行service()方法,在service()方法内部会根据请求方式的不同执行不同的doxxx()方法。
当关闭服务器或从服务器中移除项目时,Servlet的实例就会被销毁,并且执行destroy方法。
Servlet生命周期从始至终有且仅有一个Servlet实例。
ServletContext
ServletContext 接口。上下文/全局管理者。作用:
//1. 作为域对象存储数据/共享资源
setAttribute(String key,Object value) //设置值
Object getAttribute(String key) //获取值
removeAttribute(String key) //删除值
//2. 读取web项目下文件
InputStream getResourceAsStream("/WEB-INF/classes/...") //获取资源以流的形式
String getRealPath("/WEB-INF/classes/...") //获取文件磁盘真实路径
方式二:类加载器读取文件,局限于/WEB-INF/classes下的文件
类名.class.getClassLoader().getResourceAsStream("文件名")
//3. 获得全局初始化参数(web.xml - <context-param>)
String getInitParameter(String key) //通过名称获取指定的参数值
Enumeration getInitParameterNames() //获取所有的参数名称
//4. 获得文件的MIME类型(大类型/小类型)
String getMimeType(String 文件名称)
配置全局初始化参数:WEB-INF/web.xml - <web-app> -
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
ServletConfig
ServletConfig (web.xml配置文件中当前Servlet的配置对象)
//获取名称(的servlet-name)
String getServletName()
//参数操作(<init-param> 标签下)
String getInitParameter(String key) //通过参数名称获取指定参数值
Enumeration getInitParameterNames() //获取所有的参数名称<servlet-name>
对象创建时机:由服务器创建,通过servlet的init(ServletConfig config)将该对象传入
|
|