前言
最近的这段时间一直在学习Java EE,刚刚完成了从0到1的蜕变,所以顺便整理一下我所了解到的Java EE,给刚入门学习的新人一些头绪,而所谓“启示录”,就是这个意思。
一.Java EE是什么?
Java EE(Java Enterprise Edition)是一种企业级应用的软件架构,同时是一种思想,一套规范。
二.Java EE的发展史
Java Enterprise Edition的发展不知不觉已经12年了,不知道大家有没留意,一开始,Java Enterprise Edition简称“J2EE”,直到版本5才改名为Java EE,而现在最新的版本则是Java EE 6。
到这里,或许有人会问,为什么会有这么多套Java EE规范?这些版本的差别是什么?
1.J2EE1.2的出现,主要是将之前各个单独的规范绑定到一起。
2.J2EE1.3,则是继续完善J2EE体系结构。
3.J2EE1.4,主要是加入了一个重要主题:Web Service
4.而Java EE 5,主题则是“简化”,简化之前复杂的J2EE思想,改善开发体验。
三.Java EE到底要解决什么问题?
1.Java EE解决什么问题?
从Java EE发展背景看,它与“分布式应用”以及“互联网应用”的关系密不可分,而这两者也正是Java EE要解决的问题!
其实,分布式应用随着90年代互联网的兴起逐渐开始普及。在90年代中,各种分布式应用标准逐渐诞生,如:OMG的CORBA,MS的DCOM等,而Sun在推出Java的RMI(Remote Method Invocation)后,便以RMI作为通信基础构建了Java EE。我认为,Java EE最核心要解决的问题就是“分布式应用”。而在接下来的竞争中,Java EE也不负所托,逐渐取代了CORBA,DCOM的地位。
2.分布式应用与RPC
RPC(Remote Procedure Call),在聊到分布式应用时很多人会第一时间想到它。所谓RPC,就是远程调用一个服务,但效果和本地调用一样。在最初的时候,RPC很类似C语言的函数调用,但随着编程语言和技术的发展,特别是面向对象和面向组件技术的广泛应用,便出现了“远程对象/方法调用”。所谓“远程对象/方法调用”其实就是把调用远程对象和本地对象的区别隐藏起来,让调用者可以像使用本地对象那样调用远程对象。从本质上说,最初的RPC和后来的“远程对象/方法调用”稍有不同,在“远程对象/方法调用”中,被调的服务还需要考虑如:对象生命周期管理,事务处理……这些问题。但笼统地说,最初的RPC和“远程对象/方法调用”都称为:RPC,所以之前提到的如:DCOM,CORBA,JAVA的RMI,.NET的Remoting都称为RPC。而我认为,RPC的本质就是:应用协议 + 传输协议。而各种不同的RPC实现之间的区别亦在此。
而所谓的“分布式应用”,实际上可以说是用RPC方式,把各个分布在不同机器的应用模块联合成一个系统。可以说RPC是“分布式应用”的基础,所以就有“以RMI作为通信基础构建了Java EE”这一说了:>
四.Java EE体系结构
这里,我打算从分析“企业级应用”入手,并藉此逐步建立整个Java EE体系。
1.概述Java EE体系结构
为了有印象,我们先来个最简单Java EE架构图看看:
从上图看到,Java EE一般分为4层:
(1)客户端
(2)web层
(3)业务逻辑层
(4)企业信息层(EIS:Enterprise Information System)
呵呵,不要以为Java EE只是描述服务端规范,实际上,它还是包含了一些客户端相关东东,比如:Applet...不过,Java EE的重点还是在服务端这方面,而本文重点也是介绍Java EE在服务端这方面的内容。
2.“企业级应用”分析
(1)分布式应用
首先从总的来看,一个“企业级应用”代表着,这个系统肯定是“非常大型的”,这么大型的系统,这么多的应用,是不可能把应用都部署在一台机器上的,所以“分布式应用”这个需求便顺理成章地出现。理想的“企业级应用”中,各种功能模块应该分布在不同的机器上,在需要某功能的时候,我们可以动态地进行调用。
(2)系统分层
企业应用中,业务的功能会非常复杂。此时,模块间的解耦以及系统的分层开始显得重要,解耦与分层会使得系统结构清晰,并且健壮。而传统的分层模式是一般是:接入层,逻辑层,数据层。
(3)异步
设计分布式应用时,你遇到的第一个问题就是:等待…..在企业级应用中,业务的处理时复杂的。如果把子模块部署到不同机器后,要处理一个业务,很可能需要到多台机器上进行调用;另外,子模块的运算也需要一定的时间,此时,“等待”就出现了。由于你无法预计这个复杂的业务什么时候才能处理完,所以,“异步”这个概念也顺理成章地被引入。(其实,这也体现了软件设计中“快慢分离”的原则)
(4)事务,安全
关于事务的重要性这里就不多说了。
而安全,一般指对某个模块的授权,身份验证等等,在企业级应用中,安全绝对是重要的一块。
(5)Java EE平台与其他已有资源、服务、系统的整合
在Java EE出来之前,很多公司很可能已经建立了比较完善的企业信息系统(EIS),显然,和这些已有的系统整合,在企业级应用中显得尤为重要。
3.Java EE体系结构详述
OK,现在让我们来逐步了解,Java EE每个部件的作用吧。
(1)Servlet,JSP
JSP,Servlet同属“web层”,并都属于“动态网页技术”。所谓“动态网页技术”和传统的“静态网页技术”不一样,传统的“静态网页技术”说白就是把做好的html文件直接上传到服务器并直接供客户浏览,而“动态网页技术”则是每次都根据用户请求,动态生成响应页面并返回。“动态网页技术”的好处不言自明,无论从灵活性,数据保密性…等方面说都是“静态网页”所无法媲美的。但“动态网页技术”也是有缺点的,就是相对较慢,现在的解决方案一般是:把“动态网页”中相对固定的部分做缓存,即所谓“静态页面”。(额.…..“静态网页”和“静态页面”本质上没什么区别,都是静态页面,但思想上却有很大区别。而现在的程序员一般会对“静态”这个词赋予一个新的含义:“缓存”)
【1】Servlet
Servlet实际上就是按照Servlet规范编写的一个java类,与传统的命令行启动的Java应用程序不同,Servlet位于Web服务器内部,并由Web服务器加载并调用。
【2】JSP
JSP全称是:JavaServer Page。这项技术的推出目的其实很简单,为了弥补Servlet一个很重要的缺陷:“麻烦”。
先看看Servlet到底什么地方让人觉得麻烦,下面是一个Servlet处理Get请求例子:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("处理GET请求ing......");
response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();
out.println("<HTML>"); // 静态内容
out.println("<BODY>"); // 静态内容
out.println("Hyddd's Servlet Demo " + new Date().toString()); // 动态内容
out.println("</BODY>"); // 静态内容
out.println("</HTML>"); // 静态内容
}
从上面这个例子,相信大家已经发现问题了,Servlet主要是把动态内容混合到静态内容中以产生html,这导致Servlet代码中将会输出大量的html标识,哇,地狱,简直就是地狱,同时,这也非常不利于程序员和UI美工的配合(不要指望美工人员会和你一起写html标识)。为了解决这些问题,JSP诞生了。
JSP是一种建立在Servlet规范之上的动态网页技术,通常做法是:在html页面中嵌入JSP标记和脚本代码。JSP把静态内容和动态内容的分离,实现了内容和表示的分离。
【3】Servlet与JSP的关系
上图描述得比较清楚了,JSP文件先是转换为Servlet类,然后编译,并启动Servlet实例响应客户端请求。为什么说JSP是建立在Servlet上的动态网页技术,从这里可以看出来。
Web层主要就是JSP以及Sevlet这两项技术。
相关推荐
java ee基础使用教程郑阿奇里面含有书中的所有ppt和代码
精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码.rar精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码.rar精通Java EE项目案例-基于Eclipse Spring Struts Hibernate光盘源码....
基于 java EE .Java权限后台管理系统.pdf基于 java EE .Java权限后台管理系统.pdf基于 java EE .Java权限后台管理系统.pdf基于 java EE .Java权限后台管理系统.pdf基于 java EE .Java权限后台管理系统.pdf基于 java ...
java ee
本书是一个面向任务的实用指南,通过一系列实用示例来介绍如何开发Java EE 7(java平台企业版7)企业应用。这本书由Oracle的Java EE文档小组成员倾力编写,会让初学者和中缎Java程序员深入了解这个平台。 这个指南包括...
Java EE 7 tutorial 中的examples代码,找了很久才找到下来的,跟Java EE 7 tutorial配套使用,是官方的学习资料。
Practical JSF in Java EE 8 pdf Master the Java EE 8 and JSF (JavaServer Faces) APIs and web framework with this practical, projects-driven guide to web development. This book combines theoretical ...
Java EE编程 源代码Java EE编程 源代码Java EE编程 源代码Java EE编程 源代码
《轻量级Java EE企业应用实战:Struts2+Spring4+Hibernate整合开发(第4版)》是...第一部分介绍了Java EE开发的基础知识,以及如何搭建开发环境。第二部分详细讲解了Struts 2.3、Spring 4.0和Hibernate 4.3三个框架
java EE,servlet jsp java web 开发的帮助文档,API
Java EE 设计模式 Professional Java EE Design Patterns
Develop professional applications in Java EE 7 with this essential reference guide
精通Java EE:精通Java EE 整合应用案例\源代码第五章
JavaEE课程设计报告-基于Java EE身体健康管理平台.pdfJavaEE课程设计报告-基于Java EE身体健康管理平台.pdfJavaEE课程设计报告-基于Java EE身体健康管理平台.pdfJavaEE课程设计报告-基于Java EE身体健康管理平台....
java ee 8实现的微服务,涵盖范围广泛,所有java ee技术条线的微服务技术都有介绍,完整的样例。
精通Java EE:精通Java EE 整合应用案例\源代码第三章
本书是一个面向任务的实用指南,通过一系列实用示例来介绍如何开发Java EE 7(java平台企业版7)企业应用。这本书由Oracle的Java EE文档小组成员倾力编写,会让初学者和中缎Java程序员深入了解这个平台。 这个指南包括...
精通轻量级Java EE 框架整合方案,光盘资料