zoukankan      html  css  js  c++  java
  • 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容器管理。
         
    让自己变得更优秀才可以有更多资源
  • 相关阅读:
    代码整洁之道-格式
    代码整洁之道-函数
    redis常规命令记录
    周报2019.7.19
    docker mysql安装
    Python requirements.txt
    Javascript-关于null、undefined、空字符串的区分
    Javascript-string-Array
    取出两个二维数组中不重复的数组值方法
    让未知宽高的元素水平垂直居中
  • 原文地址:https://www.cnblogs.com/wangsen/p/4972463.html
Copyright © 2011-2022 走看看