轻量级JAVA EE平台
稳定的性能、良好的开放性、严格的安全性
选择Java EE构建信息化平台
企业的信息化 --> 不断整合 --> 异构系统
跨平台性、开放性、各种远程访问技术
2006 --> Java EE概念 --> 两个主要规范 JSF1.2和EJB 3.0
SSH组合是一种轻量级的Java EE平台
高度的实用性和可扩展性
基于轻量级Java EE平台的应用可运行在普通的 Web 容器中,无需EJB支持,一样具有稳定的性能和极高的可扩展性、可维护性
Java EE应用超出经典Java EE应用规范 一种更广泛的开发规范
经典Java EE应用以EJB为核心,以应用服务器为运行环境
轻量级Java EE应用保留了经典Java应用的架构
Java EE规范特征:面向对象建模、优秀的应用分层、良好的可扩展性、可维护性
Domain Object层:POJO组成,包含了各自所需实现的业务逻辑方法
DAO层:数据访问对象层 DAO组件组成 (经典的EAO层对实体的CRUD)
业务逻辑层: 业务逻辑对象组成,实现系统所需的业务逻辑方法
①用于暴露Domain Object所实现的业务逻辑方法
②也可能仅仅依赖DAO组件
控制器层:拦截,调用业务逻辑方法,处理请求,结果转发到不同表现层组件
表现层:JSP、Velocity、PDF文档视图组件等
大致如下几类组件
表现层组件:JSP、Velocity、FreeMarker、Tapestry、普通的应用程序、小型智能设备
控制器组件:MVC框架提供一个前端核心控制器,核心控制器负责拦截用户请求,并将请求转发给用户实现的控制器组件。而用户实现的控制器则负责调用业务逻辑方法,处理用户请求。
业务逻辑组件:核心组件。通常,一个业务逻辑方法对应一次用户操作。对业务逻辑方法增加事务性。业务逻辑方法仅仅负责实现实现业务逻辑,不应该进行数据库访问,业务逻辑组件中不应该出现原始的Hibernate、JDBC等API。
当系统需要在不同持久层技术之间切换时,系统的业务逻辑组件无需任何改变。
JSP页面调用Hibernate的Configuration接口,荒唐!没有脱离Model 1的JSP开发模式。
JSP、Servlet中不要出现持久层API,包括JDBC、Hibernate、Entity EJB API。
理想情况是:业务逻辑组件中都不要出现持久层API。
DAO组件:也称数据访问对象,每个DAO组件都提供Domain Object对象基本的创建、查询、更新、删除等操作,对应数据表的CRUD原子操作。
不同的持久层技术,DAO组件的实现完全不同。每个DAO组件都提供接口,与业务逻辑组件解耦。
领域对象组件:抽象了系统的对象模型,每个领域对象对应一个或多个数据表。
软件不能彻底替换,只能在其原来的基础上延伸,因为软件往往是信息的延续,是企业命脉的延伸。
对于一个信息化系统,前期开发工作对整个系统工作量而言,仅仅是小部分,而后期的维护、升级往往占更大的比重。
要求软件系统具有很好的伸缩性,我理解为弹性。
理想的软件系统,各个设备支持热拔插,设备与设备之间实现完全透明,只要有通用的接口,设备之间就可以良好协作。
让应用之间的耦合停留在接口层次,而不是代码层次。
优秀的轻量级Java EE架构:Struts 2+Spring+Hibernate。无需专业的Java EE服务器,只需要简单的Web服务器。
常见的Web服务器:
Tomcat:Sun官方推荐的JSP服务器
Jetty:可以作为嵌入式服务器,应用中加入Jetty的JAR文件,应用可在代码中对外提供Web服务。
Resin:目前最快的JSP、Servlet运行平台。
专业的Java EE服务器,支持更多的Java EE特性,如分布式事务、EJB容器等。常用:JBoss、WebLogic、WebSphere。
JSP是最早的Java EE规范之一,最经典的之一。
JSP是“草稿”文件,真正提供HTTP服务的是Servlet。广义的Servlet包含了JSP和Servlet。
Servlet 3.0提供了异步请求、Annotation标注、增强的Servlet API。
使用JavaBean来传输数据,中间层组件会将应用底层的状态信息封装成JavaBean集来传输数据,也称为DTO。
FreeMarker或者Velocity充当表现层技术。
Struts最早的MVC框架,Struts结合WebWork -> Struts2,拥有众多优秀的设计。
JSF:Sun推荐的Java EE规范,Apache提供了MyFaces实现。设计理念比Struts2更优秀。
Tapestry:纯粹的、组件式的MVC框架。提供了控制器和页面模板,无需使用表现层技术。
Hibernate:JDBC基于SQL,与面向对象不太一致。需要以面向对象的方式操作数据库 -> ORM。
最早的ORM:Entity EJB
POJO映射成持久化类,以面向对象的方式来操作POJO,Hibernate框架将这种操作转换成底层的SQL操作。
Sun 公司抛弃EJB 2.X规范,引入JPA规范。
JPA规范是一种ORM规范,底层可以使用Hibernate、TopLink等任意一种ORM框架作为实现。
如果应用程序面向JPA编程,可以在各种ORM技术之间自由切换。
iBATIS:SQL语句映射成对象,SQL Mapping工具。
Spring只是抽象了大量Java EE应用中常用代码,充满了各种设计模式,单例、工厂、抽象工厂、命令、职责链、代理模式。
Spring号称一站式解决方案。持久层框架为空!魅力所在,能与大部分持久层框架无缝结合。
像一个中间层容器,向上整合MVC,向下整合持久层框架。
轻量级Java EE这个概念就是由Spring框架衍生出来的。
真实的企业应用开发有两个重要的关注点:可维护性和复用。
企业希望以最快的速度,开发出最稳定、最实用的软件。
早期使用PowerBuilder和Delphi开发,公司有自己的基础类库。
为什么不将重复开发工作抽象成基础类库?a、开发效率 b、降低错误风险
每个软件公司有自己的一套基础类库。框架也可以看成一套基础类库,抽象了软件开发的通用步骤。
使用的框架到底是别人提供的,还是自己抽象出来的。
第三方框架经过更多人测试,自己抽象的框架更加熟悉底层运行原理。
Tomcat:提供Web容器基本功能、支持JAAS、JNDI绑定。
Tomcat只有7.0.X才支持Servlet3.0规范。不要下载安装版,启动、运行看不到控制台输出。
bin/命令路径 conf/配置 lib/服务器核心类库
logs/空路径每次运行日志 temp/Web应用运行临时文件
webapps/用于自动部署Web应用
work/运行过程中生成的class文件 可以删除
Tomcat依赖一个环境变量:JAVA_HOME
再次讨论下JDK的安装目录
bin/ javac.exe native2ascii.exe等
lib/ dt.jar tools.jar
jre/ JDK自带的JRE
配置tomcat的端口与控制台
改变服务端口 conf/server.xml 68行
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
tomcat运行多个服务,复制server.xml中的<Service>元素,在不同的端口实现提供多个服务。
列出Web应用根路径下的所有页面 修改conf/web.xml 104、105行
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>