MVC框架和经典三层结构

1.MVC框架

JSP,全称 Java Server Pages,中文名是 Java 服务器页面,其实是一种以 Java 为主的跨平台 Web 开发语言。JSP 文件由传统网页 HTML 文件插入 Java 程序段所形成,实现了 HTML 语法的 Java 扩张。在服务器端执行后的 JSP 文件,会返回给客户端一个 HTML 文本,用户通过浏览器即可浏览。

Servlet(Server Applet,服务端程序)是 Java Servlet 的简称,称为小服务程序或服务连接器,用 Java 编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态 Web 内容。

MVC,全称 Model View Controller,分别对应着 模型、视图、控制器。MVC 框架是一种软件设计的规范。模型对应业务模型,视图对应用户界面,二者的实现代码通过 MVC 模式分离开来,二者的同步更新由控制器实现。用户通常看到的指的就是视图。对于 Web 应用程序,视图就是由 HTML 元素所构成的界面。用户的输入由控制器接收,然后去调用模型和视图满足用户需求。

Model 代表着业务逻辑代码与数据库代码,View 对应数据的展示代码,比如 JSP 页面,就是专门用来展示数据,美化页面的。Controller 主要用来捕获请求并控制请求转发,Servlet 来充当这一角色,连接着 View 和 Model,从 View 中获得指令,再从 Model 中通过业务逻辑代码获取需要的数据,然后在通过 Servlet 去交给 View 层去显示。也就是 MVC 三层结构的意义。

java mvc 主流框架 java的mvc框架_servlet


打开浏览器,输入网址,就是到服务器中请求页面(可能是 JSP,也可能是别的),然后显示到浏览器上,然后通过点击 JSP 页面上的内容,提交请求,到服务器中,也就到了 Control(Servlet)这一块,Servlet 通过分析请求,知道用户需要什么数据,那么就通过 Model 从数据库拿到数据,再将数据显示在 JSP 中,并将 JSP 发送回浏览器,显示给用户看,所以我们经常说,JSP 就是 View 层,给用户看的,Servlet 作为控制流程,而编写操作数据库代码,业务逻辑代码就属于 Model。这就是 MVC 的应用。

2.经典三层结构

经典三层结构分别是:表示层(Web 层)、业务逻辑层(Service 层)、数据访问层(Dao 层)。用一张图来描述这其中的关系。

java mvc 主流框架 java的mvc框架_java_02


因为现在只学习 Servlet、JSP,所以在表示层中就放的是 Servlet 和 JSP 了,如果学了 3 大框架:Struts、Spring、Hibernate,会发现Struts 是处理表示层的一个框架,Spring 就是 Service 层,而 Hibernate 是在 Dao 层的一个框架了。

java mvc 主流框架 java的mvc框架_java mvc 主流框架_03


经典三层架构和 MVC 的关系?

它们是两个毫无相关的东西,经典三层架构是一种分层思想,将开发模式分为了这三层,每个人根据自己的专长,开发不同的模块,比如,前端工程师,那么就专攻表示层即可,想办法如何让页面变的更好看,如何吸引别人,而有些专门做数据库工作的人,就可以只关注操作数据库的活,如何让查询更加快速有效,而不必关注数据该如何显示这种问题。这就是分层带来的巨大好处,而 MVC 是一种设计模式,目的是让 HTML 代码和业务逻辑代码分开,让代码看起来更加清晰,便于开发。

硬说他们有关系的话,只能说他们有共同的点,分层,解耦。实际项目中的包命名结构,其也是按照三层架构思想来进行编写代码的,脑袋里要保持着这种思想进行开发。

经典三层架构是一种设计模式,而 MVC 框架只是该模式的一个具体实现。设计模式比框架更加抽象。设计模式更像建筑师手中的图纸,而框架则代表了实际的建筑。框架可用代码表示并直接执行或复用,模式只是对问题的描述或解决问题的方法的描述。

java mvc 主流框架 java的mvc框架_servlet_04


实际项目中的包命名结构,其也是按照三层架构思想来进行编写代码的:

xxx:代表公司名称,yyy:代表项目名称

说明

com.xxx.yyy.dao

dao层接口

com.xxx.yyy.dao.impl

dao层实现

com.xxx.yyy.service

service层接口

com.xxx.yyy.service.impl

service层实现

com.xxx.yyy.web

web层

com.xxx.yyy.util

工具包

com.xxx.yyy.domain

javabean