J2EE定义
J2EE,英文名全程Java 2 Platform Enterprise Edition,翻译过来J2EE就是java的企业版。
J2EE架构
J2EE使用多层分布式的应用模型,这个多层通常通过四层来实现,J2EE架构如下图所示:
①客户层:运行在客户计算机上的组件,用户与系统的接口逻辑,通过http协议的来访问应用服务器。
② Web 层:运行在J2EE服务器上的组件,比如大家使用到的JSP页面,以及Velocity模板引擎等。
③业务层:同样是运行在J2EE服务器上的组件,即业务逻辑的实现。
④企业信息系统层(EIS):是指运行在EIS服务器上的软件系统。
J2EE三大框架
J2EE三大框架主要是指:Struts+Hibernate+Spring。
1.Struts
Struts2是一个基于MVC设计模式的Web应用框架,用于创建企业级Java web应用程序,本质是一个大大的Servlet。
Struts工作原理就不得不提到MVC设计模式,MVC即Model-View-Controller的缩写,它是Web应用当中的常用的设计模式。
具体如下图所示:
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化,Struts是MVC的一种实现。
1)控制(Controller)
在Struts中ActionServlet起着一个控制器(Controller)的作用,这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点,它截取和分发这些请求到相应的动作类,这些动作类都是Action类的子类。
另外控制组件也负责用相应的请求参数填充 Action Form,通常称之为FromBean,并传给动作类:通常称之为ActionBean。
动作类实现核心商业逻辑,所有这些控制逻辑利用Struts-config.xml文件来配置。
2)视图(JSP)
主要是由Jsp来控制页面输出的。它接收到Action Form中的数据,利用html,taglib,bean,logic等显示数据。
3)模型(JavaBean)
在Struts中,主要存在三种bean,分别是:Action,ActionForm,EJB或者Java Bean。ActionForm用来封装客户请求信息,Action取得ActionForm中的数据,再由EJB或者Java Bean进行处理。
Struts2工作流程如下图所示:
第一步:客户端请求一个HttpServletRequest的请求。
比如:在浏览器中输入http://localhost: 8080/getUsername.action就是提交一个HttpServletRequest请求。
请求会被Tomcat接收到,TomcatServer来选择处理这个请求的Web应用。
第二步:这个请求经过一系列的过滤器Filter。
这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过滤器,比如:ActionContextCleanUp、其他过滤器SiteMesh等、 FilterDispatcher等。
注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器:Othter Filters、SiteMesh等,最后到FilterDispatcher(Struts2实现中控制层Controller的核心)。
第三步:接着FilterDispatcher被调用
FilterDispatcher是struts2框架的心脏,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个HttpServlet Request请求。
如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
第四步:ActionProxy通过struts.xml询问框架的配置文件
找到需要调用的Action类,例如:用户注册示例将找到UserReg类。
第五步:ActionProxy创建一个ActionInvocation实例
同时ActionInvocation通过代理模式调用Action,但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor拦截器。
第六步:根据struts.xml中的配置找到对应的返回结果
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。
第七步:返回结果
最后通过HTTPServletResponse返回客户端一个响应。
2.Hibernate
Hibernate是一个ORM框架,Hibernate实现了Java对象与关系数据库记录的映射关系,对JDBC做了轻量级的封装,简化了数据访问层编码。
Hibernate工作原理及流程,如下图所示:
主要分为如下9个步骤:
1)读取并解析配置文件;
读取并解析hibernate.cfg.xml配置文件
2)读取并解析映射信息:hibernate.cfg.xml中的读取并解析映射信息;
3)创建SessionFactory;
SessionFactory sf = config.buildSessionFactory();
4)打开Sesssion;
Session session = sf.openSession();
5)创建并启动事务;
Transaction tx = session.beginTransaction();
6)操作数据库,并持久化操作;
persistent operate
7)提交事务;
tx.commit();
8)关闭Session;
9)关闭SesstionFactory
3.Spring
Spring 是一个轻量级的Java 开发框架,Spring主要用来开发Java应用,Spring 可以被看作是一个大型工厂。
1.IOC
IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。
IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。
传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试,有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,如下图所示:
上图引入了IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器。
所以,IOC借助于“第三方”实现具有依赖关系的对象之间的解耦,使程序更优良。
IOC容器其实就是一个大工厂,它用来管理我们所有的对象以及依赖关系。
- 原理就是通过 Java 的反射技术来实现的,通过反射我们可以获取类的所有信息(成员变量、类名等等等);
- 再通过配置文件(xml)或者注解来描述类与类之间的关系。
这样我们就可以通过这些配置信息和反射技术来构建出对应的对象和依赖关系了,如下图所示:
2.AOP
AOP(Aspect Orient Programming),直译过来就是 面向切面编程,AOP是一种编程思想,是面向对象编程(OOP)的一种补充。
面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术,如下图所示:
Spring的AOP实现原理其实很简单,就是通过动态代理实现的。
Spring AOP 采用了两种混合的实现方式:JDK 动态代理和 CGLib 动态代理。
J2EE技术
主要包括以下这些技术:
1)Servlet
Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。
2)JSP
JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,Web页面制作的.任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。
3) EJB
EJB定义了一组可重用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。
4)JDBC
JDBC(JavaDatabase Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。Java中的JDBC相当于Microsoft平台中的ODBC(Open Database Connectivity)。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》