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 ...
随机推荐
- linux命令笔记
3步实现ssh login不用密码: 1 ssh-keygen (Create public and private keys) 2 ssh-copy-id -i ~/.ssh/id_rsa.pub ...
- Scalaz(31)- Free :自由数据结构-算式和算法的关注分离
我们可以通过自由数据结构(Free Structure)实现对程序的算式和算法分离关注(separation of concern).算式(Abstract Syntax Tree, AST)即运算表 ...
- ahjesus code simith 存储过程模板
<%------------------------------------------------------------------------------------------ * Au ...
- php学习5-时间和日期
如果时间时区不对,使用时间是要先设定时区,使用date_default_timezone_set() 设置新时区 date_default_timezone_set('Asia/Shanghai'); ...
- [小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)
在使用xUnit.Net Framework构建单元测试或自动化测试项目的时候,无论是针对一些比较耗费资源的对象亦或是为了支持Test case预设数据的能力,我们都需要有一些初始化或是清理相关的动作 ...
- linux下MySQL表名忽略大小写设置
最近公司项目的MySQL数据库要迁移到linux下,部署时日志总是显示报找不到一个表,用MYSQL查看明明有这个表.后来经百度,原来LINUX下的MYSQL默认是区分表名大小写的. 用命令查看当前是否 ...
- Android 手机卫士5--手机防盗
1,界面介绍 跳转到导航界面的第1个,描述功能 跳转到导航界面的第2个,必须,绑定sim卡,才可以跳转到第三个界面跳转到导航界面的第3个,必须输入电话号码,(两种途径(1,输入2,选择))跳转到导航界 ...
- DOM相关知识点以及原型
DOM(增删改查): 查询 1.获取元素 1.1标准DOM API document.getElementById document.getElementsByTagName document.get ...
- 基于jQuery的ajax对WebApi和OData的封装
基于jQuery的ajax对WebApi和OData的封装 WebApi 的使用带来了一个显著的特点,对type有一定的要求.一般ajax的type无非就是两种,GET和POST.如果用JSONP来跨 ...
- 如何订阅Form的自定义事件
Window Form类有很多的属性/方法和事件,其中事件属于一种发布订阅模式 .订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主体对象.这个主体对象在自身状态变化时,会通知所 ...