Web Profile 是JavaEE的一个子集,从Java6开始允许通过profile的形式定义规范子集。完整的JavaEE还包含EJB等内容,Web Profile中没有
就是说第一个版本(JavaEE6)你可以用来开发部署并运行符合JavaEE规范的全部功能,第二个版本(JavaEE6WebProfile)有些功能不行,例如JMS。
-----------------------------------------------------------------
J2EE: java官方为企业级应用设计的一些库和框架。
Java Web: J2EE里最成功的部分,就是用于做网站。其他部分并算不成功。
(以下展开说明)
J2EE,即JAVA官方为企业设计的一些应用框架,大概包含JDBC、JNDI、EJBs、RMI、JSP、Java Servlets、 XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF等技术或框架。
其中,仅JDBC, JSP , Servlets技术在网站应用中得到业界的广泛认可; 但其他的技术,恐怕就不算是 什么成功的设计。
-----------------------------------------------------------------
Java EE是官方出的一套规范,而Java Web是使用Java进行Web开发的行为。
Web开发中,有些部分我们推荐使用EE的规范,例如Servlet(当然你不使用这套规范,硬要自己用netty,nio甚至bio监听80端口,手动解析HTTP报文也不是不可以);
有些部分我们必须使用EE有关的规范,例如连接数据库(自己手撸数据库驱动并且还无视JDBC规范的牛人我还闻所未闻);
有些部分开源社区的类库做了对官方的兼容,例如@Resource和@Component,@Inject和@Autowired。Spring扫描注解的时候,前一对注解功能类似(采用不同的BeanProcesor注入,并且默认是按类型/名称注入),后一对则完全一致;
有些部分我们嫌弃官方做得不够好,自己实现规范(RMI规定使用序列化接口传输对象,而现在比较流行的远程服务调用框架是自己实现对象传输的编码协议的;JSP是官方的模板语言,但是实际上应用较多的是Thymeleaf freemarker等HTML模板引擎);
有些地方官方发现不够好,反过来使用开源社区流行的设计,但是还是成了小众(EJB 3.0以后的版本和Spring都有IOC和DI的功能);
有些东西应该是消失在了历史长河里(8012年了,新开发的应用还有人用JNDI来定位资源,用XML来传输数据吗?)
官方制定的规范,和开源社区的产物从远古开始纠缠,相互借鉴、依赖、淘汰,即使是2018年,使用Spring Boot开发Web应用,本质上也得注册Servlet作为整个容器的启动器(Spring Web Flux异步编程那一套可以不依赖Servlet API 了,这个比较小众所以先论外)。
到现在,主流的互联网应用开发中使用的EE规范也只有Servlet和JDBC,了解和熟悉它们提供的API就足够了。
------------------------------------------------------------------
Tomcat和GlassFish的区别
两者本质上不是一类型的东西。
Tomcat是Servlet容器,GlassFish是JEE容器。JEE容器必然是包含Servlet容器这一部分功能的。
ps:以前版本的GlassFish,其内部的Servlet容器实现就是直接采用的Tomcat。
当然,JEE容器提供了更多的功能,同时也有方便的管理控制台可以在界面上进行各种配置和应用部署等,比Tomcat的Manager应用要功能丰富的多。
而如果你仅仅是写普通的Java Web,用GlassFish就会感觉重了一些。看场景
glassfish 是全认证的Java EE 服务器。包括EJB等等。
Tomcat 是简化的,基本上只是对于Web应用的功能。
glassfish 在控制页面和管理页面上比Tomcat要强大很多