java web生态系统简析 - Go语言中文社区

java web生态系统简析


java  web

首先遵循由外向内的方式进行剖析。

1.web容器

容器当属tomcat最为普遍,web容器给我们做了什么呢,监听端口,基于servlet规范,将接收的请求包装成request,经过过滤链,向下传达到servlet容器,狭义上也就是我们的网站,我们所熟知的HttpServlet就是常用的servlet。

如下,是请求经过tomcat的层次及关系:


图上的Servlet.doService(),就是我们在开发时的具体实例。

2.传统java web开发过程

针对java web,最原始的当属servlet以及后来的jsp,也就是最初学习java web时使用的技术:

servlet+html:原始的java web是在servlet中写html文本到响应流中,即html糅合在java代码中;

jsp+servlet:这个阶段,servlet作用如下:页面跳转,处理数据。jsp作用:界面操作、数据操作(可以写java代码)。由上可以看出servlet和jsp是互相糅合的,为什么会这样呢?还要从jsp视图解析上来说,jsp的出现是为了解决servlet中编写前台代码的弊端,但是jsp最终被解析成的还是servlet,也就是上一阶段的servlet+html。所以不言而喻,本质上都是servlet,也就不难理解jsp中为什么能写java代码了。

从上面来看,传统的java web项目开发形式比较单一,耦合性比较大,一个大型的网站开发完成后......类爆炸!!因为一堆的servlet,且功能上混杂。

so,接下来java web的三方框架就应运而生了。

3.web 框架

为啥说servlet是java web的核心呢?

针对java语言设计web之初设定好的规范,该规范是java web的基础,也是所有开发web必须遵守的,也就是将进入的请求,通过servlet规范,让开发人员进行下层的具体实现,而上层则是servlet的上下文环境,因此大体看起来是这样的:

    web容器[tomcat]->(servlet容器->servlet具体实现[web开发人员])

因此,无论web 框架如何做,都只能从我们图1的Servlet.doService()开始进行优化。

    接下来就要介绍框架中的佼佼者:spring,以及催生出的java web框架:spring mvc、大一统框架:spring boot。当然主要介绍spring及spring mvc。

    那么,spring给我们做了什么呢?

    同样,她是在servlet具体实现这块,做了一层封装,现在有了spring之后,看起来是这样的:

                 web容器[tomcat]->(servlet容器->servlet具体实现[ spring->web开发人员])
也就是,spring的基础是servlet,也是重中之重需要明白的!!
那么spring做了哪些呢?
    我们都知道的是ioc[di]、aop,ioc是控制反转,也就是本来由我们程序员做的事:实例化对象、为对象注入参数,现在交由spring来做。aop呢,就是面向切面编程,依赖于反射机制,进行针对bean的各个切面的“侵入”。
说到面向切面编程,那么可能很多人对我说的以下几个概念有模糊:过滤器、拦截器、aop。

过滤器:在spring框架中,对servlet的封装,包括了对进入的servlet在交付到下层前的过滤链的添加,便于将请求拦截在前面,是针对整个请求来说的;

拦截器:你会说了,过滤器不就是拦截吗,道理是,但是作用位置不一样,因此名称有区别。拦截器是进入servlet容器后拦截请求的。

    他俩的关系就是这样:
        请求->web容器->过滤器(dofilter)->dispatcherServlet[spring的接力棒]->拦截器(前中后)-> 真正的调用handler,也就是action、controller。
    那么上面两个也是aop思想的实践者,但是手段比较普通,过滤器是通过chain,拦截器是在调用handler前中后插入钩子,aop狭义上是针对spring bean的基于代理的切入。

    说完spring,接下来spring mvc,spring mvc之所以带上spring,是因为她是基于spring,做的针对java web的框架。进入正题,spring mvc为我们解决的哪些问题呢?

    传统的java web开发我们说到,前后端代码混合糅杂、项目功能层次不清、代码功能不明确,是开发过程及后期维护的让人头疼的事情,那我们想要的是什么样的呢?前后代码分开、按代码功能、业务功能进行代码的架构。

m(model):基于模型,抽象业务,进行数据承载;

v(view):view层仅负责界面的开发和数据的使用,不会糅合后台代码,与后台定制契约,分开对项目进行开发;

c(controller):控制器层负责整体的调度,包括数据的处理及视图的选择。

    另外,基于spring的spring mvc,在代码层次上有了较为明确的分层:controller、service、dao、model。

    综合以上的优点,spring mvc使得开发、维护web项目的成本大大降低。

4.视图渲染

    默认的jsp视图解析器,然后根据现有不同的视图解析器,有以下几种:thymeleaf、velocity等,目的是为了解耦的更加彻底一些,脱离servlet的视图解析器就应运而生,按该解析器的格式输出数据,编写界面的前端人员按照格式去使用数据,这样相当程度的做了解耦。当下较为普遍使用的视图解析器有thymeleaf、velocity等。

5.orm

hibernate、mybatis。

6.数据库连接池

dbcp、c3p0、druid以及无连接池的jdbc,使用他们的时候,统一调用由jndi。

    以上内容后期均会做详细展开。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/GAOXINXINGgaoxinxing/article/details/79939218
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-12 17:46:35
  • 阅读 ( 502 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢