本文次要梳理Java后端开发中的外围概念,帮忙从顶层了解整个后端技术体系
@author Frankir
要想彻底了解明天各种顶层框架技术的作用和相互之间的关联及区别,咱们须要从最原始的JavaWeb开发技术开始梳理。
1. servlet+jsp+html+css+js的时代
在这个阶段,程序员依据JavaEE-Servlet标准,编写解决前端申请的servlet,在servlet中编写service()办法,处理器申请返回响应。
以最经典的Tomcat作为Http服务器和Servlet容器的形式为例,首先咱们须要晓得如果仅仅有Http服务的性能,不编写servlet,咱们能够应用相似Ngnix这样不带Servlet容器的服务器来做,这样浏览器其实是能够通过url申请获取到服务器上的动态资源的。比方https://blog.csdn.net/silence_xiang/article/details/103277852获取文章。
然而如果心愿Web服务器能过依据咱们的输出返回响应的内容,比方在表单中提交数据查问后端数据库上满足条件的数据记录,就须要引入Web容器/Servlet容器,由Servlet负责承受申请和返回响应。
Http服务器和Servlet容器的性能界线是:Http就像是前台,负责网络通信和申请的解析,而Servlet容器是业务部门,负责解决业务申请。(如果只是动态资源,那还解决什么呢,间接返回就好了)。留神,在Tomcat的实现中,申请动态资源其实是会应用一个默认的Servlet实现的。
有了Servlet容器,配置好web.xml文件,批示什么样的url该当由哪个servlet解决,最后的Web性能就能够实现。
起先,程序员间接在servlet代码外面内嵌html代码,返回给浏览器解析,这样做导致servlet代码极其简单。同时咱们也晓得html是无奈表白动静的数据内容的。为了解决这个问题,引入了Jsp技术。Jsp其实就是一种Servlet,只不过看起来就像html那样。一个显著的区别是,一个html能够间接在浏览器关上,而Jsp不行,因为它是一个Servlet,须要通过java程序的翻译,能力被浏览器解析。好了,到此为止,咱们就能够应用servlet+jsp(+html+css+js)实现web开发了。
2. 晚期其余技术的演变
在servlet+jsp开发模式下,JavaEE的经典三层架构是web层+service层+DAO层。web层承受用户申请,调用service层实现业务,返回响应。service层实现各种业务解决,提供各种业务API给web层应用。DAO层实现与数据库相干的操作。这个时候为了将web层的工作拆分成组件,升高代码的耦合度。引入了MVC的设计模式。
- View视图层:只负责数据和界面的显示,不承受和显示数据无关的代码,便于程序员和美工的分工合作。(Vue/Jsp/Thymeleaf/Html)
- Controller控制器:只负责接管申请,调用业务层的代码解决申请,而后派发页面,是一个调度者的角色。(Servlet)
- Model模型:将与业务逻辑相干的数据封装成具体的JavaBean类,其中不掺杂任何与数据处理相干的代码(JavaBean/Domain/Pojo)Model是由Service调用的。
同期间前端呈现了jquery开发库,简化js的编码。在DAO层,为了简化java程序和数据库的交互,呈现了Jdbc-DBUtils数据库连接池和用于将数据表中的记录封装成JavaBean的工具包。
3. Spring框架 SpringMVC MyBatis
在传统的OOP面向对象的开发方式中,程序员编写程序,在程序中读取配置信息,创建对象,应用对象实现工作。程序中大量的获取对象的操作其实是和业务逻辑不太相干的。Spring是一个容器框架,它依据注解或者xml配置文件,创建对象,并放入到IOC容器中,并且能够解决对象之间简单的依赖关系。当程序员须要应用某个对象(比方userAction)时,就间接从容器中获取,这样就能够更加关注如何应用对象实现相应的业务。
要了解AOP就先要了解动静代理机制,一句话总结就是:创立指标对象的代理对象,通过代理对象调用指标对象的指标办法实现目标办法的性能加强。AOP是基于反射+动静代理的,其外围就是应用切面类,将切面类的告诉办法切入到指标办法的几个横切关注点的地位上,实现对立的切面编程。
Spring框架的内含很多,上面是Spring5.x的架构图
能够分明的看到,IOC容器是Spring治理Beans的外围。SpringMVC(Web+WebMVC)是基于Spring容器的MVC设计模式web开发框架。除此之外,Spring还提供了JDBCTemplate简化数据库拜访,@Transactional事务管理,@ExceptionHandler异样解决等组件。
MyBatis是三层构造中长久层的框架技术。次要是将sql语句从java源码中剥离到xml配置文件中,程序是以OOP的形式来操作DB的,而不再是之前面向数据表中行记录的数学思维,这样做代码的耦合度进一步升高。同时还能够通过配置缓存等形式优化数据库拜访,减小数据库的压力。
4. Spring容器和Servlet容器
后面提到,Tomcat作为Web服务器和Servlet容器的联合,能够承受网络http申请,解析为合乎Servlet标准的申请对象和响应对象。比方,HttpServletRequest对象是Tomcat提供的,Servlet是JavaEE标准,Tomcat是实现这一标准的Servlet容器。
而SpringMVC其实就是web层解决Servlet申请的一个利用框架,他是基于Spring容器和Servlet的。咱们晓得地方控制器DispatcherServlet是SpringMVC中解决申请的外围,而它实质上就是一个Servlet(实现了Servlet接口),是Tomcat这个[Web服务器+Servlet容器]加载和调用的DispatcherServlet。
DispatcherServlet也有本人的容器(基于Spring容器),通常能够称它为SpringMVC容器。这个容器负责的是和SpringMVC也就是Web层相干的bean,比方@Controller(Handler)和视图解析器等。同时Spring中还有其余的bean,如Service层的@Service、DAO层的@Repository、其余组件@Component等等,这些是由全局的IOC容器治理的,即能够了解成Spring有两个IOC容器。
如果只是应用Spring容器治理bean,不应用SpringMVC作为web层的开发框架,那么Tomcat(Servlet容器):先解析web.xml文件(servlet-class、servlet-mapping),通过Spring提供的IOC容器获取对应的servlet对象,当url-pattern产生匹配的时候触发对应的代码逻辑,实质上还是Tomcat间接负责http报文的解析(这是它作为Http服务器应该干的)和servlet调度的工作(这是它作为Servlet容器应该干的)。此时Spring容器只是简化了Bean的治理和获取、提供相似JdbcDataAccess更不便的一些操作。
如果应用SpringMVC作为web层的开发框架,那么Tomcat只是解析http报文,而后间接转交给DispatcherServlet,上面由SpringMVC接管,依据注解、配置实现相应的逻辑,而后将后果提交给DispatcherServlet,最初转发给Tomcat,Tomcat构建好http响应报文后返回给浏览器。
理清这些关系之后,相似过滤器和拦截器有什么区别?web.xml文件和springDispatcherServlet-servlet.xml文件有什么区别?这样的问题就很容器答复了
5. 更进一步
前面又呈现了SpringBoot简化SSM我的项目的配置,再有就是面对分布式,面对关系型数据库的缺点提出Redis等等都是更进一步的优化了。