Javaweb经典三层架构的演变

1.Javaweb经历了三个时期

①JSP Model1第一代 
JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,全部的操做都在JSP页面中,连访问数据库的API也在JSP页面中完成。也就是说,全部的东西都耦合在一块儿,对后期的维护和扩展极为不利。css

JSP Model1第一代

②JSP Model1第二代 
JSP Model1第二代有所改进,把业务逻辑的内容放到了JavaBean中,而JSP页面负责显示以及请求调度的工做。虽然第二代比第一代好了些,但还让JSP作了过多的工做,JSP中把视图工做和请求调度(控制器)的工做耦合在一块儿了。html

这里写图片描述

③JSP Model2 
JSP Model2模式已经能够清晰的看到MVC完整的结构了。 
·JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户; 
·Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图; 
JavaBean:模型层,完成具体的业务工做,例如:开启、转帐等。前端

这里写图片描述

这就是javaweb经历的三个年代,JSP Model2适合多人合做开发大型的Web项目,各司其职,互不干涉,有利于开发中的分工,有利于组件的重用。可是,Web项目的开发难度加大,同时对开发人员的技术要求也提升了。java

2.JavaWeb经典三层框架

咱们常说的三层框架是由JavaWeb提出的,也就是说这是JavaWeb独有的! 
所谓三层是表述层(WEB层)、业务逻辑层(Business Logic),以及数据访问层(Data Access)。 
·WEB层:包含JSP和Servlet等与WEB相关的内容; 
·业务层:业务层中不包含JavaWeb API,它只关心业务逻辑; 
·数据层:封装了对数据库的访问细节;web

  注意,在业务层中不能出现JavaWeb API,例如request、response等。也就是说,业务层代码是可重用的,甚至能够应用到非Web环境中。业务层的每一个方法能够理解成一个万能,例如转帐业务方法。业务层依赖数据层,而Web层依赖业务层! 
这里写图片描述数据库

 

一、Servlet的出现

    上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来。 最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,好比html、css等。 可是能够想象:根据用户请求的不一样动态的处理并返回资源是理所固然必须的要求。编程

     java 为了应对上述需求,就必然推出一种技术来支持动态需求,所以servlet技术诞生后端

    使用Servlet技术,页面中的全部信息须要经过输出语句来生成。下面的代码(部分代码)生成的页面的内容就是“HelloWorld!”。浏览器

复制代码
public void doGet(HttpServletRequest request,HttpServletResponse)
   throws IOException,ServletException
{
    response.setContentType("text/html;charset=gb2312");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>Hello World!</title></head>");
    out.println("<body>");
    out.println("<p>Hello World!</p>");
    out.println("</body></html>");
}
复制代码

二、Jsp的出现

   servlet诞生后,sun公司很快发现servlet编程很繁琐,1)servlet代码有大量冗余代码,out输出就得写上百遍;2)开发servlet必须精通网页前端和美工,你得很是不直观的在Servlet中写前端代码,这使得实现各类页面效果和风格很是困难。服务器

   因此,sun公司借鉴 微软的asp,正式推出了jsp(servlet1.1)。采用HTML语言直接生成界面,在界面中使用<% %>脚本标识嵌入Java代码

   一个简单的jsp例子

复制代码
<html>
   <head><title>测试</title></head>
   <body>
      第一阶段<% String str = “test” ; out.println(str); %>
    </body>
</html>
复制代码

 

三、 倡导了MVC思想的servlet版本servlet1.2出现------------jsp+javabean+servlet

    jsp出现后,也存在问题,1)前端开发人员须要看大量他看不懂的后端代码;2)一样,servlet开发人员也在复杂的前端代码中找到其能写servlet代码的地方

   因此,MVC思想的JSP+JavaBean+Servlet诞生了

  JSP(V):JSP完成输入和输出,主要使用HTML标签和JSP标签

 Servlet(C):主要完成控制,接收请求,调用业务处理(JavaBean),根据调用的结果找到一个JSP页面对用户进行响应

JavaBean(M):完成全部的处理过程

四、框架阶段

    倡导了MVC思想的jsp+javabean+servlet出现,也存在问题:1)jsp页面中嵌入了不少java代码,使得结构很乱;2)对于大型项目,servlet过多,转向频繁,流程,配置等不易集中管理,于是出现了struts

4.一、Struts的出现

2001年6月,struts1.0出现,struts针对jsp推出了一套struts标签,从而使得jsp中没有了Java代码,结构清晰,功能强大。针对servlet,它提供了Action类来代替了servlet,这个Action类具备servlet的功能,而且可以进行一些请求过滤和自动转码的功能。

4.二、Spring的出现

本来已经开起来很完美了,可是又有一个问题,就是咱们在Action调用DAO、Java bean等对象的时候都须要在自身代码中构建它们的对象来使用,这样增长了程序的耦合性,这与咱们:“高内聚、松耦合”的思想不符合,那么怎么解决这个问题呢?于是出现了Spring框架。

Spring框架有两大功能:IOC(控制反转)和AOP(面向切面的编程),其中IOC就是说:当一个类中想要调用另一个类的对象时,不须要再经过new 关键字来建立,而是由Spring框架来负责:建立、分配和管理,从而下降了程序中的耦合性。而AOP能够用来作一些日志的打印和输出,用于提示程序执行过程当中的一些具体信息等。

4.3 、SpringMVC的出现

最后struts和Spring的整合,因为每个bean都要在Spring中注册,每个URL都要在struts配置文件中配置。当bean不少和URL对应的请求不少的时候,配置文件无疑会是很庞大的,这个就会使得配置起来很麻烦的费力。那么还有没有更好的办法使得可以结合Spring的功能和struts的功能,可是又可使配置文件不会批量的增长?于是SpringMVC出现了

SpringMVC经过“基于注解”的方式代替了struts,而且经过Controller类来代替和实现了Action的功能。因为是基于注解的,因此不少的配置信息放在了Controller类中配置,从而下降了.xml文件的配置复杂度。

相关文章
相关标签/搜索