JSP的开发模式
JSP的开发模式一
servlet开发缺陷,显示html麻烦
|
jsp的缺点,封装,处理代码麻烦
|
jsp+javabean,显示数据和处理数据很方便,缺点维护很麻.jsp显示数据 javabean封装处理数据
JSP的开发模式二
Servlet+JSP+JavaBean,优点:Servlet用于整体的调用,Servlet作为控制器,
模式二也叫MVC的设计模式(思想)
MVC(架构模式): M:modle模型层 JavaBean
V view 视图层 JSP
c controller 控制层 Servlet
Servlet执行过程
通过<Servlet-class>设置的全类名 反射获得Class对象
|
生成Servlet的实例,获取service方法,并执行
很多框架的配置都运用到了反射
BeanUtils中使用的是(内省技术),使用了在introspector中的getBeanInfo方法(获得所有属性,公开方法和时间)
getPropertyDescriptors获得所有的属性PropertyDescriptor[](只看有多少个get或者set,不管成员变量);
PropertyDescriptor中 getReadMethod()获得get方法
getWriteMethod()获取set方法
事务:
事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么一起成功要么一起失败
MYSQL的事务管理有两种方式(MYSQL事务默认是自动提交的,Oracle的事务默认不是自动提交的)
手动开启事务
start transaction
commit/rollback
设置一个自动提交参数
show variables like "%commit%" 查看commit相关的参数
set autocommit=0(或者off); 关闭自动提交
设置完后要 commit
JDBC中的事务管理(重点)
Connection可以进行事务管理
setAutoCommit()设置自动提交
commit();提交事务
rollback();回滚事务
方式一:
事务加到业务层,在业务层获取Connection对象
setAutoCommit,将同一个Connection给dao,最后没有异常再commit
保证多个事务一起成功一起失败
方式二:将这个连接绑定到当前的线程中,再DAO中获得连接直接从当前的线程中获取
ThreadLocal 类(Hibernate框架)
set
get
remove
DBUtils中的事务管理
有事务管理的时候用 QueryRunner(),就不用连接池
获取Connection之后
conn.setAutoCommit(false);
执行完SQL操作后
DbUtils.commitAndCloseQuitely(conn);
并且在catch(){}中DbUtils.rollbackAndCloseQuietly(conn);
用业务层获得的连接
事务的特性(面试题):
逻辑上的一组操作
4大特性:
原子性:
强调事务的不可分割
一致性:
强调的是事务执行前后的完整性保持一致
隔离性:
一个事务的执行不应该收到其他事务的干扰
设置事务的隔离级别,
数据库内部定义了四种隔离级别,用于解决三种隔离问题
(未提交读)1、read uncommited 最低事务级别,允许以上三类隔离问题的发生
(已提交读)2、read commit 不会发生脏读,允许不可重复读和虚读发生
(可重读读)3、repeatable read 不会发生脏读、不可重复读,允许虚读发生
(串行化)4、serializable 事务最高级别,所有相同数据事务操作,都会串行进行,不存在并发(必须等一个事务结束后才能执行),不存在三类隔离问题
MYSQL隔离级别:repeatable read, Oracle隔离级别 read commint
持久性:
事务一旦结束,数据持久的保存到数据库
如果不考虑事务的隔离性就会引发一些安全性问题
一类是读问题:
引发三种情况:
1.脏读 一个事务读到另一个事务还有没提交的数据
2.不可重复读 一个事务读到了另一个事务已经提交的update数据导致当前事务查询的结果不一致
3.虚读/幻读 一个事务读到了另一个事务已经提交的 insert的数据,导致在当前事务多次查询结果不一致
一类是写问题
引发两类丢失更新
Connection中可以设置隔离级别:
setTransactionIsolation(int level)
TRANSACTION_NONE
指示事务不受支持的常量。
static int TRANSACTION_READ_COMMITTED
指示不可以发生脏读的常量;不可重复读和虚读可以发生。
static int TRANSACTION_READ_UNCOMMITTED
指示可以发生脏读 (dirty read)、不可重复读和虚读 (phantom read) 的常量。
static int TRANSACTION_REPEATABLE_READ
指示不可以发生脏读和不可重复读的常量;虚读可以发生。
static int TRANSACTION_SERIALIZABLE
指示不可以发生脏读、不可重复读和虚读的常量。
MYSQL中输入以下命令
从5.5以后set session transaction isolation level 设置隔离级别 read uncommited,read commit,repeatable read,serializable
select @@tx_isolation 查看隔离级别
早期EE开发的结构
客户端层(早期用的applet 后来用的html),
早期EE开发的经典三层结构
web层(Servlet jsp),业务层(EJB JAVABEAN),持久层(JDBC)
MVC与web service dao层之间的区别
ee的三层结构和MVC是不同的时期,不同的组织或人提供的开发解决方案
EE的三层结构是sun公司提出的
现在的开发也满足MVC 也满足ee的三层结构
|
|