A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kuqi3712 中级黑马   /  2018-1-29 21:23  /  1025 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的三层结构

1 个回复

倒序浏览
温故而知新   加油啊  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马