链接:https://www.zhihu.com/question/28832635/answer/42431133
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
自问自答,这几天想了一下这个问题,有一些收获。
Java EE相比于Java SE来说,除了多出包(Package)以外,还多了若干Java容器,如Tomcat、GlassFish、IBM WebSphere等。
那么 Java EE和Java SE的区别到底在哪里呢?
以Java EE的子集Servlet为例,我们现在用Servlet可以相对轻松的写出一个动态Web站点。
而在Java EE出现以前,如果要用Java SE写一个动态Web站点,需要自己造轮子从头开始写起,从与浏览器建立TCP连接,到解析HTTP协议请求,到生成HTTP协议请求……一大堆事情都要自己来做。关键问题是,像建立TCP请求、解析HTTP请求等这种繁琐而又占用时间的事情,每次写网站的都要重复来做,每次做的都是一样的,于是人们就想为什么不把这些每次重复来做模块做成一个个的轮子来用呢?
但是又在由谁造轮子的问题上产生了分歧,于是一个叫JCP的组织决定,把程序的接口约定好,大家一起来按照接口造轮子,最后消费者喜欢用谁家的轮子就用谁家的轮子。
然后Java EE就产生了,这组接口就叫Java EE,各家自己造的轮子(如omcat、GlassFish、IBM WebSphere)就叫做Java容器。
我们自己写的Java代码与Java容器的关系就像是CD与播放器的关系一样。如果我们要自己制作一首新歌曲,不用每次自己制作重新制作一个播放器,然后在播放器中存入我们制作的歌曲。只需要制作一个CD唱片就好了,播放器这种轮子,直接就可以用来播放我们制作的CD唱片了。