Java Web 发展的理解
我们大家现在基本上都用struts2或者Spring MVC 来进行Java web的开发,但我们都知道Java web 的核心技术是:jsp 、servlet和javabean的组合,那为什么现在都不用这些,而是使用一些开源的框架?
下面我们来分析一下Java web 发展的过程
最开始的Java web 技术是使用jsp、servlet和javabean来实现的,servlet作为MVC三层架构的C(也就是控制层),提供了request 和response这两个对象来分别接受客户端的请求和向客户端返回请求数据。当接收到客户端的请求后,调用Java bean来处理一些事务,完成逻辑功能,获取到需要的处理结果,然后生成静态页面,最后返回给客户端。
jsp、servlet和Java bean能很好的实现MVC的三层架构思想,但是依然存在很多的问题,比如说:jsp页面中嵌入很多的Java代码,使得结构混乱。对于servlet层,由于客户端传送过来的是文本数据,当是一些“时间”或者是“视频”则需要转码,这个是一个非常繁琐和与核心业务无关的操作,增加了程序员的工作。
因而出现了struts。struts针对jsp推出了一套struts标签,从而使得jsp中没有了Java代码,结构清晰,功能强大。针对servlet,它提供了Action类来代替了servlet,这个Action类具有servlet的功能,并且能够进行一些请求过滤和自动转码的功能。
原本已经开起来很完美了,但是又有一个问题,就是我们在Action调用DAO、Java bean等对象的时候都需要在自身代码中构建它们的对象来使用,这样增加了程序的耦合性,这与我们:“高内聚、松耦合”的思想不符合,那么怎么解决这个问题呢?既然有问题提出,就会有他的解决方法。人就是那么的聪明和不安于现状,总想着如何方便、创新。
因而出现了Spring框架。Spring框架有两大功能:IOC(控制反转)和AOP(面向切面的编程),其中IOC就是说:当一个类中想要调用另外一个类的对象时,不需要再通过new 关键字来创建,而是由Spring框架来负责:创建、分配和管理,从而降低了程序中的耦合性。而AOP就是用来做一些日志的打印和输出,用于提示程序执行过程中的一些具体信息等。
最后struts和Spring的整合,由于没有个bean都要在Spring中注册,没有个URL都要在struts配置文件中配置。当bean很多和URL对应的请求很多的时候,配置文件无疑会是很庞大的,这个就会使得配置起来很麻烦的费力。那么还有没有更好的办法使得能够结合Spring的功能和struts的功能,但是有可以使得配置文件不会批量的增加?还是那句话,只要有问题,总是有办法解决的。
因而Spring MVC出现了。它通过“基于注解”的方式代替了struts,并且通过Controller类来代替和实现了Action的功能。由于是基于注解的,所以很多的配置信息放在了Controller类中配置,从而降低了.xml文件的配置复杂度。