JavaEE基础问题
本文介绍了对于JavaEE几个关键问题的理解,这是进一步学习JavaEE使用以及后续理解JavaEE的基础。
什么是JavaEE
https://www.jianshu.com/p/92ccf737bece
- JavaEE就是Java推出的企业级程序开发规范。涉及到2个关键概念,分别是企业级和规范
- 什么是企业级?
- 企业级的程序可以简单地理解为服务。
- 什么是规范?
- 结合上文,可以理解为为了实现一套企业级服务,java设计的一套规范,而规范实际上就是接口。这些接口包括JPS,Servlet等。
- 类比JDBC,如果数据库要和java对接,则需要实现一套jdbc的接口。同样的,如果要实现一套服务,就可以通过实现Servlet接口来完成。
- 我们听说的Tomcat不支持JavaEE所有的规范,其意思就是Tomcat没有实现JavaEE所有的接口,那么也就意味着有些功能应该是不能用的。
总结来说,JAVAEE就是java为了实现服务开发功能而设计的一套接口。如果我们实现了这套接口,就能够开发出一套服务。JavaEE的本质就是规范和接口,Servlet的本质和JDBC是一样的。
什么是Servlet
https://www.bilibili.com/video/BV1Jv411B7F5?p=213
- Servlet的全称是Server Applet,意思是运行在服务端的程序,在java中,程序的本质就是类和方法,因此,Servlet的本质是一个Java类,或者更加准确地说,是一个JavaEE的接口,也就是Java定义的规范。
- JavaEE接口文档:https://docs.oracle.com/javaee/7/api/toc.htm
- 通过上面的官方文档,可以更加深刻地体会到,Servlet本质上和JDBC和Map、List完全一样的,就是一个Interface。
- 实现Servlet是我们开发服务端程序的方式之一,并且是现在最主要的方式。
- Servlet程序最大的特点是无法独立运行,它没有主方法,只能依赖外部容器去调用,这个容器一般就是服务器,比如说Tomcat。这也就是我们经常说的,Servlet服务依赖容器才能运行。
- 容器是如何调用Servlet程序的呢?容器和用户写的程序都遵循JavaEE的Servlet规范即可。
- 容器作为一个框架,提前确定好调用接口实现类的流程,用户实现Servlet接口,把编译好的代码交给容器,客户端调用容器特定的入口,最终实现对用户代码的调用。
- 这个过程本质上是框架和用户自定义插件的交互过程。
因此,记住一点,Servlet就是JavaEE的一个接口,实现了Servlet接口的代码就是可以作为一个服务端程序,用户如果想写一个服务端程序,只要实现Servlet的全部方法,然后把程序交给容器运行即可。我们几乎所有的JavaWeb服务,全部都是Servlet程序。
Tomcat和Servlet是什么关系
Tomcat和Servlet是容器和程序的关系,Servlet可以被Tomcat识别和实例化,并能够在Tomcat中执行各个方法。Tomcat代理Servlet的大致过程如下:
- 客户端访问Tomcat服务,输入访问路径
- Tomcat接收请求,根据路径对应到具体的Servlet类
- Tomcat将Servlet实现类实例化,创建对象,这是基于反射实现的
- Tomcat调用Servlet类的方法,完成请求处理的操作
在Tomcat代理的过程中,一个关键的技术是反射。这个过程中也使用了模板方法设计模式(几乎所有的框架工作原理都使用了模板方法设计模式)。
在这个过程中,Tomcat起到了2个作用:
- 接收并封装请求,封装响应并完成响应。把通用的网络通信部分做成固定的流程,与业务无关。
- 调用Servlet实现类的方法,注入业务。
从Tomcat的工作模式中,可以学习到容器类框架的宏观设计原则
- 将整个流程中通用的部分集成到框架中,做成固定的流程
- 在涉及到具体功能的部分,采用模板方法+反射的方式,将具体逻辑加入到模板流程中。
- 框架和业务之间通过一套接口规范联系起来,自定义逻辑只需要实现这套规范即可。
采用这一套设计原则的框架有:Tomcat、MapReduce等