- 我是一个线程(修订版)
- 我是一个 Java class
- Javascript:一个屌丝的逆袭
- Java : 一个帝国的诞生
- JSP 一个装配工的没落
- TCP/IP 之 大明王朝邮差
- TCP/IP 之大明内阁
- TCP/IP 之蓟辽督师
- CPU 阿甘
- CPU 阿甘之烦恼
- CPU 阿甘:函数调用的秘密
- 我是一个网卡
- 我是一个路由器
- 我是一个进程
- 我是一块硬盘(上)
- 我是一块硬盘(下)
- 我是一个键盘
- 张大胖的 socket
- 张大胖学递归
- 学习面向对象的令狐冲
- 张大胖学数据库
- 数据库村的旺财和小强
- 小李的数据库之旅(上)
- 小李的数据库之旅(下)
- 漫画:什么是机器学习?
- 那些烦人的同步和互斥问题
- IE 为什么把火狐和 Chrome 给打伤了?
- 对浏览器村的第二次采访
- 节约标兵 IE 的自述
- EMail 诞生记
- Email 诞生记(下)
- Http 历险记(上)
- Http 历险记(下)-- Struts 的秘密
- 动物王国的面向对象
- 冯·诺伊曼计算机的诞生
- Http Server : 一个差生的逆袭
- 张大胖的加法器
- 从 1 加到 100:一道简单的数学题挑战下你的大脑
- 编程语言
- Javascript:一个屌丝的逆袭
- 计算机语言之战
- 我和编程语言的爱恨情仇(上)
- 我和编程语言的爱恨情仇(下)
- Android 为什么选择了 Java
- iOS 为什么选择了 Object-C?
- Basic : 一个老兵的自述
- Node.js : 我只需要一个店小二
- 命令式编程 vs 声明式编程
- 编译还是解释?
- 程序人生
- “架构师"小赵
- 师兄说
- 师姐说
- 小王的架构师之路
- 小李的版本管理系统
- 小超穿越记
- 小李的 Build 之路(上)
- 小李的 Build 之路(下)
- 张大胖改 Bug
- 我的编程之路--大学趣事
- 码农小王的一天
- 小李在外企
- 张大胖的需求估算
- 从厨师到码农
- 聊一聊那些神一样的程序员们(上)
- 聊一聊那些神一样的程序员们(中)
- 聊一聊那些神一样的程序员们(下)
- 谁是互联网之父?
- 一个价值百万的创业教训
- 让自己与众不同 - 提升工作的价值
- 看看你的“易燃性”
- 从无聊的工作中寻找价值
- 什么样的学生适合报考计算机?
- 谈谈程序员的职业方向(上)
- 谈谈程序员的职业方向(中)
- 谈谈程序员的职业方向(下)
- 谈谈培训班的作用
- 码农需要知道的“潜规则”
- 学习编程的加速度
- 码农在工作中的必备能力
- 码农和英语
- 老司机经验
- 假如时光能够倒流, 我会这么学习 Java
- 假如我是计算机系老师
- 学会编程, 而不是学会 Java
- 从增删改查中突围
- 抽象:程序员必备的能力
- 懒就一个字
- 编程的自学方法
- 小王买房记
- 从一道面试题谈谈一线码农应该具备的基本素质
- 想写框架的看过来
- 苹果手机变砖头以后
- 如何快速的学习一门技术?
- 唯一不变的是变化: 谈谈微信应用号
- 什么是企业应用?
- 勿以浮沙筑高台
- 为什么敏捷开发难于成功?
- localhost vs 127.0.0.1
- GitHub/Stackoverflow 找工作时有什么用?
- 动词 or 名词 :这是一个问题
- 如何选择入行语言
- 有时候,沉默是金
- 零 Bug 的代码是怎么炼成的?
- 浮点数为什么不精确?
- 文章错误大全
- Open Source--不要为了开源而开源
- 一不留神,代码就腐化了
- 先做个“键盘侠”, 再来写程序
- 不加断点调试的程序员是好程序员
- 码农必备技能:烂代码的处理之道(上)
- 码农必备技能:烂代码的处理之道(下)
- 学习数据结构有用吗?
- 从现在开始,丰富你的简历
- 那些永不过时的书,你看过几本吗?
- 学好编程必备的一个品质你知道吗?
- 你最爱的 Java
- 搞懂了这几点,你就学会了 Web 编程
- Spring 的本质系列(1) -- 依赖注入
- Spring 本质系列(2)-AOP
- 三层架构和 MVC 那点事儿
- Java 帝国之拨云见日识回调
- 小张的 Duck Typing
- JDBC 的诞生
- JDBC 后传
- 一个不安分的 JDBC 驱动
- Java 帝国之 Java bean (上)
- Java 帝国之 Java bean(下)
- Java 帝国之函数式编程
- Java 帝国之函数式编程(下)
- 关于 Java 初学者需要知道的 10 件事
- JUnit 你不知道的那些事儿
- 圣诞礼物:Java EE 的历史
- Java EE 读书指南
- 给小白的 Java EE 指南
- 给小白的 Java EE 指南(2)
- 给小白的 Java EE 生存指南(3) : XML
- 给小白的 Java EE 生存指南(4) : 一只叫 Tom 的猫
- 给小白的 Java EE 指南(5) : AJAX
- 给小白的 Java EE 生存指南(6) :Java 反射
- 闲聊
- "饿了么"初体验
- 来自大脑的控诉
- 一个高中生是怎么玩自媒体的?
- 尝试 分答
- 到底应不应该上培训班?
- 自学编程中遇到问题怎么办?
- 据说 99%的初级程序员看完后都不迷茫了
- 一行代码引发的“血案”
- 对一个死锁问题的思考
- 通过外包进入名企
- 请开往十年前的今天
- 为什么自学中最好有个师傅指导一下?
- 这个网站值得你花时间投入
- 为什么你无法坚持自学编程?
圣诞礼物:Java EE 的历史
前言:
昨天下午有同学问我 Java EE 是干什么用的,能开发什么系统, 我在 QQ 中敲了很多字,掰扯了半天,终于给他整明白了。
我突然意识在其实很多初学者对 Java EE 的来龙去脉并去清楚, 大家并不知道为什么会出现这个技术, 要解决什么问题。 所以就写了这篇文章介绍下 Java EE 的历史。
先把时间扯的远一点, 94 年我上高中的时候, 见过亲戚家有过电脑, 很好奇, 虽然上面都是一些单机桌面程序, 根本上不了网, 但是一个小小的扫雷程序就足以吸引很多眼球了。
后来上了大学, 接触电脑越来越多, 局域网已经普及, 互联网开始抬头,这时候 C/S (Client-Server ) 结构的程序开始出现了,例如 QQ, 棋牌类游戏, 还有著名的 PowerBuilder 开发的 MIS(管理信息系统), 都是典型的客户端-服务器结构,程序运行在个人的电脑上,和服务器通信。
C/S 软件界面可以整的很漂亮, 用户体验很好, 但是缺点也很明显, 就是用户必须要安装客户端, 并且需要升级客户端来用新功能, 这样就带来两个问题
(1) 服务器端发生变化, 一定要能兼容很多客户端版本,要不然有的客户端软件就运行不了了, 因为客户不一定升级。
(2) 可能会出现 DLL 地狱问题 -- 自己百度下啥是 DLL 地狱。
再后来 Web 大发展, 速度快了, 带宽也够了, 大家发现, Web 页面也能做的很漂亮了, 把程序放到服务器端, 用浏览器访问多好, 用户也不用安装,所有功能都是即时更新。
但是 html 只是静态的,怎么才能变成动态的, 可交互的呢?
CGI 技术出现了, CGI 允许 web 服务器调用外部的程序, 并把结果输出到 Web 浏览器, 这样就能根据用户的操作生产不同的动态页面了。
在我读大学的年代, CGI 最常见的就是实现一个计数器, 看着自己的主页访问量慢慢的增长,那种感觉是很爽的。
当然,使用 CGI 最苦逼的就是需要用程序输出 html , 那可是整个网页的 html , 不是其中的一个片段 !
换句话说, 程序员只能在代码里写 html, 而不能在 html 里写代码 。 你可以想象一下用 C 语言或者 Perl 写 CGI 脚本的程序员那种咬牙切齿的感觉。
举个例子, 通过浏览器提交了用户名/ 密码, cgi 会这么做:
if (name=="liuxin" and password == "xxxx" ) {
println ("<html>");
println ("<head>");
println ("<title>欢迎</title>");
println ("</title>");
println("<body>")
println("<table>")
println("<tr><td>") ..... 我实在是写不下去了,太崩溃了, 这是伪码, 不要和我较劲...............
println("</td></tr>")
println("</table>")
println("</body>")
print("</html>")
}
这个时候我们赖以糊口的 Java 在干嘛?
Java 是 Sun 发明的, 当然 Sun 现在已经被 Oracle 收购了。
Java 其实是依靠 Applet ,依靠互联网才起家发达的, 大家在简陋的页面上突然看到当时极为炫目的 Applet 小动画, 立刻就震惊了。
但悲剧的是大家发现 Applet 除了用来演示以外, 似乎没有找到真正的用武之地。
浏览器还必须得装个 java 插件, 后来微软为了阻止 Java 还在自己浏览器 IE 中使坏 :-) , 这个插件运行一直不太稳定。
Java 看到 CGI 技术发展的不错, 自己也搞一个类似的吧, 这就是 Servlet , 由于提供了一个 request, response, session 等支持,用起来比 CGI 方便多了。
但是输出 html 这一块没有任何改进, 还得程序员一句一句的输出 html.
06 年我进 IBM 的时候发现有个项目是在用 servlet 输出页面 html ,完全没用 jsp, 我也就见怪不怪了, 这肯定是个 90 年代的遗留应用。
最后大家都受不了这种极为痛苦的输出方式, 于是 Sun 就弄了个 JSP , 微软也不甘示弱, 出了个 ASP。
这下子 Web 开发出现了跃进,因为不管是 JSP 还是 ASP, 都是所谓的 Server Page , 也就是说程序员终于可以把逻辑代码和 html 混在一起了! 在也不用一行一行的输出纯 html 了。
当然现在老师教导你, jsp 中不要有逻辑代码, 但在当时,这可是了不起的突破 。
我们可以先让美工把页面设计好, 然后把程序嵌入进去就行了。
再后来出现了 Struts, 使用 MVC 解决了职责划分问题, Web 应用迈向了新的台阶, 开始飞速发展, 对于这种应用,我们称为 B/S 结构,即 Browser(浏览器)-Server (服务器) 。
C/S 结构的程序当然不会消亡, 因为像聊天,视频,游戏等对性能, 界面,用户体验要求很高, 天然适合桌面程序实现。
为了支持更大,更复杂的应用开发, 微软为 ASP 添加了实现业务逻辑的 COM, COM+ ,访问数据库的 ADO 等技术。
而 Sun 和 Java 社区有更大的野心,他们提出了一套更大的, 不同于传统应用开发的架构,专门用于满足企业级开发的需求。
这些需求包括数据库, 邮件, 消息,事务处理, Java 对这些通用的需求做了抽象,形成了一些规范和标准,除了 Servelt 和 JSP ,还有 EJB, JMS , JDBC 等等。
这些东西,Sun 把他们称为 J2EE 。
为啥不是 Java EE ? 那个 2 是怎么回事?
这完全是一种市场策略, 原来 Java 的版本是 1.1 , 从 1.2 开始, Sun 称之为为 Java 2 平台 , 以便告诉大家,这是一个突破性的技术平台。 实际上也确实有所突破, Java 被分成了 J2SE (标准版) , J2EE(企业版) 和 J2ME(移动版) , 当然移动版在手机上一直没有发展起来, 直到 Android 的出现--这是后话了。
到了 2005 年, Sun 又取消了那个 “2” , 于是就变成了 Java SE, Java EE, Java ME 了。
J2EE 需要运行在一个叫应用服务器的东西里, 这就是 Weblogic, websphere , jboss, 也称为应用中间件。
J2EE 发展的非常迅猛, 迅速统治了 Web 应用开发市场, 微软的 ASP 只能偏居一隅了, 后来推出.NET 才算扳回一城。
我们走了漫长的路, 终于来到你的面前, 现在你知道 Java EE 是干啥的了吧 :-)
在后来的故事估计很多人都听过了,Java EE 远远没有宣传的那么美好, EJB, 尤其是 Entity Bean 极为难用, 对业务代码侵入性极强, 在大家想抛弃而又没有替代品的时候, 有一位大牛 Rod Johnson 如约而至,他说我们不要这种臃肿,低效,脱离现实的 J2EE, 我们要灵活,轻便,轻量级的框架, 这就是 Spring, 我们就有了依赖注入,AOP....
有位叫 Gavin King 的澳大利亚小伙子也是在忍受不了 EJB 的 O/R Mapping , 自己整了一个 Hibernate 。
再加上更早出现的 Struts, 我们 Java 程序员终于过起了幸福的 SSH 生活。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论