nutz如何体现mvc思想的
如何理解web mvc框架??
一、没有使用mvc框架之前我们都是自己根据mvc分层思想的理解去把它物理化,比如:根据包的命名,根据类的后缀名,根据文件夹的命名去定义分层。
因为每个人对mvc的理解不一样所以他的物理化体现也不一样,这就导致理解上困难,并且A规划了一遍之后,B也要规划一遍,这样就造成了不能统一
做了很多重复的工作,那么我们如果都采用同一个框架,这个框架已经将mvc的物理化抽象出来啦,那么大家就可以避免重复,理解可以统一啦。
二、web业务处理的核心就是响应http请求,在这个过程中有很多重复性的工作,使我们不能专注于业务实现,这个时候框架就又帮助我们做了很多的事情,
比如:将一个http请求达到处理这个请求的处理函数上,在到达处理函数之前进行一些权限判断,请求参数的封装,将处理完的数据进行页面的渲染等
所以web mvc框架实际上做了两大类事情:
第一类:将mvc分层思想应用于http请求响应的整个过程。
第二类:帮助使用者屏蔽web重复性的工作。
常见的mvc框架都有哪些??
spring mvc ,nutz,Struts等
实际生产环境中我们的选型是使用nutz,所以下面就谈谈nutz是如何体现mvc分层思想的。
nutz框架是如何体现mvc分层思想的??
Controller:
nutz里有一个Module的概念。
类名一xxxModule结尾的类名就定义它是一个模块类这个类和Struts的action概念相同,只负责接收请求,调用相关处理业务,返回响应的视图。
一个标准module的处理函数:
只是负责调用该module对应的service处理业务,并指定返回的视图类型以及对应的路径。
View:
nutz给视图的定义:将入口函数的返回值(一个Java对象)渲染到 HTTP 响应流中。
nutz认为:一种视图就是一种将 Java 对象写入 HTTP 响应流的方式。
视图的类型大致有: JSP - 采用 JSP 模板输出网页
Redirect - 客户端重定向
Forward - 服务器端中转
Json - 将对象输出成 Json 字符串
void - 什么都不做
具体的实现过程可以参考nutz的文档。
nutz帮助我们实现了视图层的处理,
这样我们就不用再去关心如何将数据渲染到视图上啦,这就实现了视图和业务分离的目的。
Model:
模型层的核心是提供具体算法完成请求,比如:业务逻辑的算法,数据持久的算法。
我认为这一层主要是由使用框架者根据实际业务以及业务的需求来实现的,
框架做的事情就是为我们在实现业务的过程中消除重复让我更加专注业务,
比如:为我们提供Ioc容器帮助我们管理Bean的生命周期,
为我们提供数据库持久的基本操作接口,帮住我们减少在数据持久层的关注。
nutz处理一个http请求的过程mvc的体现:
web的核心是对http请求的处理与相应。应用mvc分层思想下的http请求的处理过程如下图:
1 用户通过浏览器发送一个http请求。
2 最终http请求到到达对应的服务器。
3 服务器找到对应的应用程序。
4 nutz会根据http的url请求映射到一个module类中的一个处理函数上。(controller层)
5 这个module处理函数调用页面service类,页面service类调用下层的business层service,
business层调用组装对应的base层的实体baseService,以及对应的dao操作,最终完成这个http请求的业务。(Model层)
6 nutz会根据这个module函数的@ok的类型决定输出什么视图类型:
有可能是jsp,json,文件流或者什么都不做。 (view层)
很明显,module只负责分发请求,返回视图类型也就是mvc中的Controller。
web层,business层,base层的service以及实体就是mvc中的module层。
nutz根据处理函数的视图类型对视图进行渲染。
nutz都做了哪些事情??
1.要全盘接受http请求,所以要配置一个大大的过滤器(servlet中的Filter),用于拦截所有的http请求。
所有它提供给你一个过滤器让你在web.xml中配置,让 预配置的项应用于处理每一个http请求中。
2.Nutz.Mvc 的核心任务就是将 HTTP 请求的 URL 映射到某一个入口函数。
基于@At注解将一个HTTP请求路径同一个 Java 函数关联起来。
3. 使用动作链机制可以定义处理一个http请求的动作顺序。
4.在http url请求到达模块的处理函数之前可以为你提供添加过滤器的方法。
比如:权限验证的过滤器,验证是否登录过滤器...
5.对http请求的参数进行适配【适配器】,也就是:"将 HTTP 参数转换成一个函数参数的过程"
如:
1.将http请求参数封装到处理函数的参数上。
2.将请求参数封装到form对象Bean中。
3.将http输入流(上传文件)映射到入口函数中的文件对象上。
4.获取servlet容器中的内置对象。
6. 将入口函数的返回值(一个Java对象)渲染到 HTTP 响应流中。
7. nutz为我们提供mvc框架挂接一个Ioc容器的方法,可以将需要被管理的bean交给Ioc容器管理。
nutz如何体现mvc思想的的更多相关文章
- MVC思想及SpringMVC设计理念
1:什么是MVC MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑 ...
- java web mvc思想介绍
1.首先简介一下什么是MVC思想. 在百度百科里面对MVC的说明,MVC全名是Model View Controller.是模型(model)-视图(view)-控制器(controller)的缩写. ...
- MVC思想架构的简单自定义UITableViewCell
在iOS的开发过程中,架构思想是很重要的一部分,目前的主流应该分为MVC与MVVM两种,在这里不做过多的区分,有兴趣的同学可以看看唐巧大神的一篇文章<被误解的MVC和被神化的MVVM& ...
- MVC思想概述
一. 传统Model1和Model2 Model1:整个web应用几乎全部用JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接作出响应.用少量的javaBean来处理数据库链接,数据库访问 ...
- iOS彩票项目--第六天,运用MVC思想搭建设置界面(非storyboard方法)
一.我只想说封装的思想很重要,MVC的思想也很重要,利用MVC思想搭建一下的界面 先说显示出来的cell,有三种(图中的两种,还有一种是最普通的,没有图片的),这种显示不同的cell,交给模型来处理, ...
- angularJS中的MVC思想?
mvc 思想: 将应用程序的组成,划分为三个部分:model , controller 和 view ; - 控制器的作用是用来初始化模型用的: - 模型就是用于存储数据的: - 视图是展示数据的: ...
- javaBean和mvc思想
JavaBean, 咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提供无参数的构造方法 ...
- 全局变量变为局部变量 & MVC思想
1 函数中的全局变量如何变成局部变量? 全局变量之间会相互骚扰.所以在代码中不要用全局变量.ES6之前只有函数里面有全局变量. 全局变成局部变量怎么变? 把代-放在一个函数如中,再.call()执行一 ...
- 简洁的MVC思想框架——Nancy(环境配置与Get操作)
Nancy官网——https://github.com/NancyFx/Nancy 概述:Nancy是一个开源的Web轻型框架内核符合MVC思想,有开发方便,路由简单的特点,而且功能齐全 起步:Hel ...
随机推荐
- PHP类和对象等代码说明
1.定义和创建类和对象: 定义类要使用class关键字.例如:class 类名{//属性和方法} 创建对象使用new关键字.例如: $p1 = new 类名;,可以基于一个类创建多个对象. 2. 类属 ...
- jquery_layout
http://layout.jquery-dev.com/documentation.cfm
- FreeBSD-安装与配置(10.3@VMware)
(#今天尝试了一天,装上了FreeBSD:记录几个重要的地方 bsdinstall/bsdconfig 善用ports,本地源 善用handbook以及doc pkg install XXX,装上Xo ...
- python 颜色定义
1.颜色定义说明格式:\033[显示方式;前景色;背景色m前景色 背景色 颜色---------------------------------------30 40 黑色31 41 红色32 42 ...
- MAC 卸载 mysql
怎样才能完全卸载mysql和删除它从你的Mac(包括所有数据库)执行以下操作: 打开终端窗口 使用mysqldump备份你的数据库将文本文件! 停止数据库服务器 sudo rm /usr/local/ ...
- Linux学习笔记16--Linux扩展权限
默认权限: 每一个终端都有一个umask属性,用于确定新建文件.新文件夹的默认权限. umask使用数字权限方式表示,如:022 一般来说,普通用户的默认umask是002,root用户的默认um ...
- 在 Windows 上遇到非常多 TIME_WAIT 連線時應如何處理
我們公司所代管的網站裡,有幾個流量是非常大的,在尖峰的時刻同時上線人數可能高達數千到數萬人,而在這個時候如果使用 netstat 或 TCPView 查看所有 TCP 連線時就會看到非常多處於 ...
- Julius JS – 最流行的网页语音识别库
JuliusJS 是用于在网页中的语音识别库.这是 Julius(由日本京都大学和日本IPA联合开发的一个实用高效双通道的大词汇连续语音识别引擎)的 JavaScript 实现.它实时侦听用户的语音并 ...
- 原生JS:Object对象详细参考
Object对象详细参考 本文参考MDN做的详细整理,方便大家参考MDN JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象. 构造函数: Objec ...
- JavaScript学习笔记-表达式和语句
表达式和语句 eval( ) 只有一个参数 参数非字符串时,直接返回这个参数: 参数为字符串时,它把字符串当成JavaScript代码进行编译,编译失败则抛出语法错误,编译成功则执行代码,并返回最后一 ...