Java EE
第一章
JavaEE架构通常分为实体层,数据访问层,业务逻辑层,控制器层,表现层
Struts是一个为开发基于MVC模式的应用架构的开源框架,是利用Servelet和JSP构建Web应用的一项技术
Hibernate是一种Java语言下的对象关系映射解决方案,实现了数据持久化功能
Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的
简述MVC思想:
MVC是将项目按照模型层,视图层,控制器层的方式进行划分,目的是将模型层和视图层的代码实现分离,降低程序间的耦合,提高了应用的重用性,适用性,扩展性以及维护性。
Struts 2是Struts 1和WebWork结合的产物
EJB组件主要有:会话,实体和消息驱动三种类型的Bean
Struts 2
第二章
Struts 2控制器包括:
1. 核心控制器:StrutsPrepareAndExecuteFilter
2. 业务控制器:Action
Struts 2在Struts.xml中配置Action信息
Struts 2的两种配置文件: struts.xml 和 struts.properities
在web.xml中配置了核心控制器后,一个Web应用就具有了Struts 2框架的基本功能
简述Struts 2的优点:
支持更多的表现层技术,有更好的适应性,Action无须与Servlet API耦合,使得测试更加容易,同时提高了代码的重用率,具有更好的模块化和可扩展性。
第三章
Struts 2中的Action可以通过ActionContext类访问Servlet API
Struts 2的异常处理机制是通过在struts.xml文件中配置<exception-mapping>元素来完成的,
配置该元素时,需要指定exception和result两个属性
配置Struts 2常量可在:
- struts.xml
- struts.properities
- web.xml
Struts 2框架下实现Action类有以下三种方式:
- 普通的POJO类
- 实现Action接口
- 继承ActionSupport类
ActionSupport类是Struts 2的默认Action处理类
第四章
自定义标签具有如下优势:
- 开发更简单
- 可维护性强
- 复用性高
自定义标签可分为3类:
- 非UI标签:数据访问,逻辑控制
- 流程控制标签
- 数据访问标签
- UI标签:生成HTML元素
- 表单标签
- 非表单标签
- Ajax标签:支持Ajax
值栈中存在的对象:模型对象,action对象,request对象
OGNL的跟对象为值栈
值栈对应ValueStack接口,该接口的实现类为OgnlValueStack
OGNL访问对象属性时,若不是跟对象需要添加#
<bean>标签用于创建一个JavaBean实例,创建实例时可以在标签体内使用<param.../>标签为该实例传入属性
Hibernate
第五章
ORM为对象关系映射,是面向对象编程语言和关系数据库之间的桥梁
ORM框架的优势:
- 通过面向对象的编程思想对数据库进行访问
- 简单易用,提高开发效率,最大限度地降低代码的编写工作
- 降低访问数据库的频率,提高应用程序性能
- 相对独立,变动时不会影响上层的实现
ORM基本映射规律:
- 表与类
- 表中的行与对象
- 表中的列与对象的属性
Hibernate的优点:
- 开源,免费
- 轻量级封装,避免引用过多复杂问题,易调试
- 具有可扩展性,API开放
- 性能稳定,具有保障
开发Hibernate应用程序的方式:
- 自顶向下从持久化类到数据库表,即先编写持久化类,再编写映射文件,进而生成数据库表结构
- 配置Hibernate应用环境
- 编写PO
- 创建Configuration对象
- 创建SessionFactory对象
- 获取Session对象
- 使用Transaction管理事务
- 使用Query进行HQL查询或利用Criteria实现条件查询
- 自顶向上:从数据库表到持久化类,即根据数据库表结构生产对应的映射文件和持久化类
- 从中间出发向上与向下同时发展:即先编写映射文件,然后根据映射文件向上生成持久化类,向下生成数据库表结构
对于需要被持久化的POJO对象的生命周期为:
- 瞬时状态:刚刚用new关键字创建,还未持久化,且尚未与Hibernate Session关联,不处于Session缓存中
- 持久化状态:已经被持久化,加入到Session缓存中,与数据库中表的一条记录对应,并拥有一个持久化标识
- 托管状态:已被持久化,但不再处于Session缓存中
每个配置文件对应一个Configuration对象,代表一个应用程序到数据库的映射配置
PO采用低侵入设计
Configuration用于配置,启动Hibernate,创建SessionFactory实例对象
SessionFactory接口用于初始化Hibernate,创建Session实例,充当是数据源代理
Session接口用于保存更新删除加载和查询持久化对象,充当持久化管理器
第六章
关联关系:
基于外键的单向和双向1-1分别为:
<many-one>,且 unique=true 和 <many-one>,且 unique=true,另一端<many-one>
基于主键的单向和双向1-1分别为:
<one-one> 和 两端都<one-one>
Hinbernate的检索方式:
- 导航对象图检索方式
- OID检索方式
- HQL检索方式:运行时解析,依赖于Query对象
- QBC检索方式:编译时进行解析,需要两个接口和一个工具类来实现
- Criteria接口:代表一次查询
- Criteration接口:代表一个查询条件
- Restrictions类:产生查询条件的工具类
- SQL检索方式
HQL是完全面向对象查询语言
QBC封装了字符串形式的查询,提供了更加面向对象的查询
Query和Criteria都可以充当Hibernate查询语句,其中Criteria用于执行Query查询
QBC适用于生成动态查询语句
QBC把查询语句分解成一组Criterion实例,可读性差
事务具有如下的特性:
- 原子性
- 一致性
- 隔离性
- 持久性
声明事务包括下面的内容:
- 事务开始边界
- commit
- rollback
第七章
类级别检索策略包括:
- 立即加载(默认)
- 延迟加载
关联检索策略:
- 立即加载
- 延迟加载
- 预先抓取
Spring
第八章
Spring解决方案主要功能包括:
- 基于依赖注入的核心功能
- 声明式面向切面编程
- 与多种持久层技术的整合
- 独立的Web MVC框架
Spring的特点:
- 轻量
- 控制反转(IoC)
- 面向切面(AOP)
- 容器
- 框架
BeanFactory接口是Spring框架的核心接口
对于复杂的以来关系,如果采用构造注入会导致构造器过于臃肿,难以阅读,这时可以使用设值注入
设值注入要求Bean提供一个默认的无参构造方法,并未需要注入的属性对应的setter方法
构造注入可以在构造器中决定依赖关系的注入顺序,有限以来的优先注入
Bean的作用域:
- 默认为singleton表示容器始终使用一个实例
- prototype表示一个Bean定义多个对象实例,每次调用getBean就创建一个新实例
- request表示每次HTTP请求就生成一个实例,只能用于Web项目
- session表示每个会话生成一个实例,只能用于Web项目
第九章
AOP将系统分为两部分:核心关注点和横切关注点
AOP是指面向切面编程
AOP常用术语:
AOP实现策略:
- JavaSE动态代理
- 字节码生成(cglib)
- 定制的类加载器
- 代码生成
- 语言扩展
Spring AOP增强类型:
- 前置增强
- 后置增强:无论方法是正常执行完还是抛出异常都会执行此增强
- 返回后增强
- 抛出异常后增强
- 环绕增强:包围连接点方法的增强,可替代前述任何一种增强
- 引介增强:能使目标类实现某个接口
(* com .. * . * Service . *(..))代表:匹配com包或其子孙包中,名称以Service结尾的接口/类中的任意的方法
AOP能否替代OOP?适用于哪些场合?
AOP是面向对象编程的一种有益补充,是OOP的补充和延续,但不能替代OOP。AOP并非适合所有场合,通常,如果在多个业务流程中都需要做相同或类似的业务处理,则特别适合使用AOP解决。
第十章
池化是一种将资源统一管理,为需要资源的任务自动调度分配资源,以提高性能并实现资源重用的技术
Spring提供的HibernateTemplate可以代理Hibernate Session的大多数持久化操作
HibernateCallback接口配合HibernateTemplate进行工作,该接口不需要关心Hibernate Session的打开和关闭,仅需要定义数据操作和访问逻辑即可
Spring提供了HibernateDaoSupport类,使用该类可方便实现DAO
OSIV模式的核心就是控制Hibernate Session对象在表示层所有数据输出结束之后再关闭,这样可以避免在表示层中读取被延迟加载的对象时抛出异常
简述Spring,Struts 2,Hibernate三个框架的集成步骤:
- web.xml中需要配置Spring的ContextLoaderListener和Struts 2的Servlet过滤器
- 所有的DAO类需要继承HibernateDaoSupport,并采用HibernateTemplate方式操作数据库
- Spring配置文件需要配置LocalSessionFactoryBean类
- Spring配置文件中配置声明式事务
- 将每个Action配置weiBean,并指明scope为prototype
- Struts 2配置文件中,需要配置每个Action,并且其class属性值不再是完整的类名,而应该是对于的Spring配置文件中的Bean的id
0 * * * * ? 每1分钟触发一次
0 0 * * * ? 每天每1小时触发一次
0 0 10 * * ? 每天10点触发一次
0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
0 15 10 * * ? 2005 2005年的每天上午10:15触发