精华内容
下载资源
问答
  • 2020-05-28 16:18:30

    Web API属于ASP.NET核心平台的一部分,它利用MVC框架的底层功能方便我们快速的开发部署WEB服务。

    我们可以在常规MVC应用通过添加API控制器来创建web api服务,

    普通MVC应用程序控制器根据用户请求的action方法返回ActionResult,

    而web api服务返回的则是json封装的模型数据。

    和MVC控制器通过URL选择action方法不同,

    API控制器根据HTTP请求方法的不同来选择API控制器方法。
    API控制器方法的命名规则一般是HTTP方法作为前缀加上控制器的名称,比如GetReservation(这只是常规做法,DoGetReservation、ThisIsTheGetAction都是允许的),

    我们从浏览器访问/api/reservation所用的HTTP方法为GET,

    API控制器会查找所有包含GET的所有控制器方法,GetReservation和GetAllReservations都在考虑之类,但是具体选择哪个还参考了所带的参数,访问/api/reservation没有任何参数,因此API控制器选择了GetAllReservations,访问/api/reservation/3自然就选择了GetReservation。

    由此我们也知道PostReservation、PutReservation、DeleteReservation分别对应HTTP的Post、Put、Delete三种方法(WEB API的Representation State Transfer - REST)。



    一个完整的API控制类类似:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Web.Http;

    namespace MvcApplication1.Controllers
    {
        public class ValuesController1 : ApiController
        {
            // GET api/<controller>
            public IEnumerable<string> Get()
            {
                return new string[] { "value1", "value2" };
            }

            // GET api/<controller>/5
            public string Get(int id)
            {
                return "value";
            }

            // POST api/<controller>
            public void Post([FromBody]string value)
            {
            }

            // PUT api/<controller>/5
            public void Put(int id, [FromBody]string value)
            {
            }

            // DELETE api/<controller>/5
            public void Delete(int id)
            {
            }
        }
    }
     

    从框架的本质区别:

    这里写图片描述 

    用上区分,mvc主要用于建站web api主要用于构建http服务,当然你非要用mvc来构建Uri式的Api也行,不过显然是没有这个必要的,一个不恰当的比喻就像是你也可以玩破解版的单机游戏,也可以通过平台进行联机,但是始终不如steam上来得爽是吧。

    自身实现上区分的话,两种框架主要是在Asp .Net的基础上进行改造,主要是对HttpModuleHttpHandler做了扩展,实现方法是不一样的,比如说前者更像是在一层上建了第二层,引伸出更强大的路由机制,实现了诸如MvcHandlerControllerFactory这种消息处理和后台控制器方法选择机制,Web Api除了扩展了前者以外,另外写出了一套独立的,独立于Asp .Net的消息处理管道,就像是借鉴原来房子的模型,重新设计出了另外一套别墅。这也很好地解释了为什么Web Api可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web HostSelf Host方式,这和WCF是相似的。而MVC只能寄宿于IIS上(不考虑.net core),就像Webform的寄宿方式。何况它们两者虽然都有ControllerAction,但是请求的实现和响应的回复机制也是不同的,比如说Web Api处理消息有两个核心类是HttpRequestMessageHttpResponseMessage。这两种框架最多只能说是模式上类似,实现上还是有很大差别的。不过两者都是Asp .Net的组成成员,图上表现得很清楚了。

    首先,两者的主要解决的问题不同!
    MVC的主要使用场景在于Web站点的开发,他在后端实现了一套完整的MVC开发框架,能提供方便的页面开发,默认使用Razor视图引擎,提供了后端html构造,用户可以方便地开发出带页面的站点。

    而WebAPI主演提供了一套RestfulAPI的开发框架,提供了较为完整的http语义支持,主要用来做开放API,更抽象,更不注重View的生成。

    从实现的角度看,虽然他俩捆绑在一起,但是两者处理管线还是不同的。
    如果你对http有较为深入理解后,你就会发现,其实他俩的界限没那么明显,那么你也许会觉得mvc做的事webAPI都能做,因为他更抽象,有时候你又不想把两者的界限搞得那么清晰

    更多相关内容
  • 谈谈如何在ASP.NET CORE MVC中创建web api

    千次阅读 2020-04-11 19:15:09
    Webapi也是一种服务,是属于服务端的,供客户端调用,类似webservice,但是与mvc请求方式不一样(MVC通过路由controller/action请求),Webapi通过不同的HTTP请求(get(查询)、put(更新)、post(增加)、delete...

     

    前言

    Webapi也是一种服务,是属于服务端的,供客户端调用,类似webservice,但是与mvc请求方式不一样(MVC通过路由 controller/action请求),Webapi通过不同的HTTP请求(get(查询)、put(更新)、post(增加)、delete)来表达不同的动作(CRUD),只关注数据。它非常适合构建移动客户端服务,显示端可以用H5等进行创建。

    MVC与Web api的区别与联系

    声明:本小结叙述来微软mvp杨旭的草根专栏https://www.cnblogs.com/cgzl/p/11814971.html

    MVC(Model-View-Controller)是一种主要用来构建UI的架构模式。对于MVC模式其实有很多种解释存在,但是无论那种解释,它们都会强调松耦合和关注点分离(separation of concerns)。 

    也是由于这两点的存在,程序的可测试性会大大提高,程序各部分的可复用性也很高。 

    更多关于MVC的介绍,可以看一下微软的官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-3.0 

    注意:MVC不是一个完整的应用程序架构,我认为它主要是用在展示层。所以实现UI就是MVC的一部分工作。 

    我认为API同样可以看作是UI,它就是为API消费者所提供的UI。 

    让我们把MVC的三部分分别对应到API: 

    • Model,它负责处理程序数据的逻辑。这里的Model可以包含在当前级别获取从存储获取数据的逻辑。但是有一些Model不包含任何逻辑,例如API所使用的DTO(Data transfer objects),这类的Model会被串行化到响应的body里面。 

    • View,它是程序里负责展示数据的那部分。在构建API的时候,View就是数据或资源的展示。现在通常使用JSON格式。 

    • Controller,它负责View和Model之间的交互。包括处理用户输入,用API的术语来讲,和API交互的“用户”就是指API的消费者,这类用户通常是另一个程序,例如Angular的SPA程序。 

    Controller和View依赖于Model,Controller依赖于View,这也是分离的一个好处。 

    换句话说,Controller会选取适当的View来展现给用户,并一同把用户请求的Model数据带回去。 

    当API消费者发出请求的时候,在Controller上面的Action将会被触发,Controller会把接收到的输入数据发送给负责业务处理逻辑或数据访问逻辑的那部分程序。然后Controller会把Model返回给View,这里的View就是资源的展示(通常是JSON格式)

    初认识.net core web api

    创建ASP.NET CORE webapi默认项目:WebAPIDemo.

    Controllers文件夹下有一个ValuesController.cs,默认代码如下:

    namespace WebAPIDemo.Controllers
    
    {
    
        [Route("api/[controller]")]
    
        [ApiController]
    
        public class ValuesController : ControllerBase
        //.Net Core2.0(VS2017)下默认继承自Controller,且上面没有打[ApiController]特性
    
        {
    
            // GET api/values
    
            [HttpGet]
    
            public ActionResult<IEnumerable<string>> Get()
    
            {
    
                return new string[] { "value1", "value2" };
    
            }
    
            // GET api/values/5
    
            [HttpGet("{id}")]
    
            public ActionResult<string> Get(int id)
    
            {
    
                return "value";
    
            }
    
            // POST api/values
    
            [HttpPost]
    
            public void Post([FromBody] string value)
    
            {
    
            }
    
            // PUT api/values/5
    
            [HttpPut("{id}")]
    
            public void Put(int id, [FromBody] string value)
    
            {
    
            }
    
            // DELETE api/values/5
    
            [HttpDelete("{id}")]
    
            public void Delete(int id)
    
            {
    
            }
    
        }
    
    }

    运行结果:

    启动运行结果如上图所示,得到了服务端数据,这说明就使用了webapi服务。请求格式

    https://localhost:44323/api/values

    是如何定位到Get方法的呢?

    https://localhost:44323/是域名 api是固定的格式 values是控制器

    是如何定位到Get方法呢?因为通过URL方法访问默认就是Get请求,默认就去请求Get方法或者以Get开头的方法名

    那么是如何定位到有参数Get方法呢,如下图请求,则请求到的是到有一个参数的get方法,因为传入一个参数1

    在ASP.NET CORE MVC项目中使用Web api

    在ASP.NET Core MVC中,WebAPI就是其中一项功能子集,可以直接使用MVC的特性及路由等功能。

    说明:以下以一个文件学习成果管理的场景如理解mvc在web api的使用

    1.建立相应的ViewModel

    public class ResultViewModel
        {
            public int Id { get; set; }
            public string StuName { get; set; }
            public string Title { get; set; }
            public string Discription { get; set; }
            public string Type { get; set; }
            public string Attachment { get; set; }
    }

    2、添加API控制器类ResultAPIController

    VS2019/2017创建的时候会默认加上特性路由[Route(“api/[controller]”)],将其中的[controller]改成Result,然后添加对应的操作,分页查看Result,根据id查看指定Result添加Result。逻辑与Controllers文件夹中的ResultController大致相同。

    代码如下:

    [Route("api/Result")]
        [ApiController]
        public class ResultAPIController : Controller 
        //此处默认是继承ControllerBase,继承这个话ViewBag没有用哦
        {
            //这里注入了两个依赖的服务,具体的功能可以不去管
            //一个是管理成果的各种信息,管理一个是类型
            private IResultRepository _resultRepository;
            private IResultTypeRepository _resultTypeRepository;
            public ResultAPIController(IResultRepository resultRepository,             
            IResultTypeRepository resultTypeRepository)
            {
                _resultRepository = resultRepository;
                _resultTypeRepository = resultTypeRepository;
    
            }
            // GET: api/result   查找
            [HttpGet]
            public IActionResult Get(int pageindex = 1, int pagesize = 5)
            {
                var results = _resultRepository.PageList(pageindex, pagesize, out int pagecount);
                ViewBag.PageCount = pagecount;
                ViewBag.PageIndex = pageindex;
                var resultList = results.Select(r => new ResultViewModel
                {
                    Id = r.Id,
                    StuName= string.IsNullOrEmpty(r.Password) ? r.StuName : "",
                    Title = string.IsNullOrEmpty(r.Password) ? r.Title : "加密内容",
                    Discription = string.IsNullOrEmpty(r.Password) ? r.Discription : "",
                    Attachment = string.IsNullOrEmpty(r.Password) ? r.Attachment : "",
                    Type = r.Type.Name
                });
                return Ok(resultList);//不能返回View,返回json
            }
            //Get api/result/5  根据条件查找
            //Get api/result/5?password=123
            [HttpGet("{id}")]
            public async Task<IActionResult> Detail(int id, string password)
            {
                var result = await _resultRepository.GetByIdAsync(id);
                if (result == null)
                {
                    return NotFound();//返回404错误
                }
                if (!string.IsNullOrEmpty(result.Password) &&                             
                !result.Password.Equals(password))
                {
                    return Unauthorized();//返回401错误,未授权
                }
                var resultView = new ResultViewModel
                {
                    Id = result.Id,
                    StuName=result.StuName,
                    Title = result.Title,
                    Discription = result.Discription,
                    Attachment = result.Attachment,
                    Type = result.Type.Name
                };
                return Ok(resultView);
            }
             //POST  api/result   增加
            //方法参数前加[FromBody] 标识,表示该参数值应该从请求的Body中获取,而不是从URL等其他地方中获取
            [HttpPost]
            public async Task<IActionResult> Post([FromBody] ResultModel model)
            {          
                await _resultRepository.AddAAsync(new Result
                {
                    StuName = model.StuName,
                    Title = model.Title,
                    Discription = model.Discription,
                    Create = DateTime.Now,
                    TypeId = model.TypeId,
                });
                return Content("ok");
                  }
        }

    运行程序访问地址http://localhost:5001/API/Result(不一定是5001下同看下图即可获取第一页的Result数据,数据格式为json(有些浏览器提示为下载文件),结果如下图所示。pageindex参数直接加在访问地址后面,如http://localhost:5001/API/Result?pageindex=2这代表访问第二页数据

    Get  http://localhost:5001/API/ Result /1获取Id为1Result数据,找不到则返回“404未找到”,Result有密码则返回“401未授权

    Get  http://localhost:5001/API/ Result /1?password=123456获取Id为1的加密数据Result数据,如果密码不对则返回“401未授权

    Post http://localhost:5001/API/ResultFromBody中加入ResultModel格式的数据(即是通过前端)提交数据通过验证之后就会添加Result,若数据验证失败则会返回400错误的请求

    至此添加Result、查看Result列表及查看Result详情的WebAPI就完成了可以用来开发手机客户端也可以在其他地方通过调用接口获取对应的数据。

    基于api的前后端数据交互

    比如:把HomeController看成是客户端,ResultAPIController(webapi)看成是接口端(服务端),通过客户端去调用webapi接口。

    例子:

    首先为HomeController 下的Index的action 添加视图(原有视图删除),代码如下

    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script type="text/javascript">
      //1.get请求
            $(function () {
                $.ajax({
                    url: "/api/Result",//前面的/不能少
                    type: "Get",//http请求类型为get,即请求服务器中Get方法
                    success: function (data) {
                        var str = "";
                        str += "<table><tr><td>标题</td></tr>";
                        //eval(data[i]).title title中第一个t要小写的,要获取的字段首字母都要小 
                       写,如上页图所示,返回的json格式的字段名都是首字母小写。
                        for (var i = 0; i < data.length; i++) {
                            str += "<tr><td>" + data[i].title + "</td></tr>";
                        }
                        str += "</table>";
                        $("#div1").html(str);
                    }
                })
            })
    //2.post请求
             $(function () {
                var postdata = { StuName: "老API" ,Title:"WebAPI测试",Discription:"WebAPI测试-post请求",TypeId:1};
                $.ajax({
                    type: "post",
                    url: "/api/Result",//前面的/不能少
                    contentType: 'application/json', //设置请求参数类型为json字符串
                   data: JSON.stringify(postdata), //将json对象转换成json字符串发送
                    success: function (data, status) {
                        alert("添加成功");
                    }
                });
            })
        </script>
    </head>
    <body>
        <div>
            <div id="div1"></div>
        </div>
    </body>

    在此视图中,也即客户端通过ajax请求去调用webapi接口,然后输出服务器端返回的数据。下面是get请求与post请求的结果,其中post请求被加密。

    补充:

    HTTP的响应状态码由5段组成: 
     

      • 1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
      • 2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
      • 3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
      • 4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
      • 5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等

    补充

    contentType字段用于描述数据实体的类型,就是指定客户端要发送的数据类型

    post请求中常见的contentType的值有四种

    1.application/x-www-form-urlencoded

    最常见的post数据类型,也是表单提交的数据类型,jquery的ajax默认也是这个

    2.multipart/form-data

    文件上传时要使用的数据类型

    3.application/json

    json格式的数据类型

    4.text/xml

    现在这个很少用了,基本没见过

    至此,查找、添加的API服务及前端调用测试完毕

    在实际开发中常用

    HTML5+CSS3 负责UI布局ajax负责数据请求(同时会用angularjs/VUE.JS进行与数据绑定jquery 负责页面动画效果webApi 负责服务端数据接口

     

    展开全文
  • Java Web中的MVC框架模式

    千次阅读 2019-05-22 21:43:00
    首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。它是一种软件设计的典范...

    一、MVC设计模式

    1.MVC的概念

    首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。它是一种软件设计的典范,最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式。

    2.MVC的详解

    虽然MVC并不是Java当中独有的,但是现在几乎所有的B/S的架构都采用了MVC框架模式,但是MVC在B/S架构中并没有完全地实现,其实我们根本不需要掌握未实现的部分。

    ·控制器Controller:控制器即是控制请求的处理逻辑,对请求进行处理,负责请 求转发;

    ·视图View:视图即是用户看到并与之交互的界面,比如HTML(静态资源),JSP(动态资源)等等。

    ·模型Model:模型代表着一种企业规范,就是业务流程/状态的处理以及业务规则的规定。业务流程的处理过程对其他层来说是不透明的,模型接受视图数据的请求,并返回最终的处理结果。业务模型的设计可以说是MVC的核心。

    3.MVC模式的用武之地

    MVC模式被广泛用于Java的各种框架中,比如Struts2、Spring MVC等等都用到了这种思想。

    Struts2是基于MVC的轻量级的web应用框架。基于MVC,说明基于Struts2开发的Web应用自然就能实现MVC,也说明Struts2着力于在MVC的各个部分为我们的开发提供相应帮助。

    二、Javaweb经典三层架构

    1.Javaweb经历了三个时期

    ①JSP Model1第一代

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

    13898040-0de4153632e620cc.png

    ②JSP Model1第二代

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

    13898040-0eaf84fbc9bc71a3.png

    ③JSP Model2

    JSP Model2模式已经可以清晰的看到MVC完整的结构了。

    ·JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户;

    ·Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图;

    JavaBean:模型层,完成具体的业务工作,例如:开启、转账等。

    在这里插入图片描述

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

    2.JavaWeb经典三层框架

    我们常说的三层框架是由JavaWeb提出的,也就是说这是JavaWeb独有的!

    所谓三层是表述层(WEB层)、业务逻辑层(Business Logic),以及数据访问层(Data Access)。

    ·WEB层:包含JSP和Servlet等与WEB相关的内容;

    ·业务层:业务层中不包含JavaWeb API,它只关心业务逻辑;

    ·数据层:封装了对数据库的访问细节;

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

    展开全文
  • MVC模式简介

    千次阅读 2020-06-19 23:59:53
    文章目录MVC介绍MVC举例MVC优点MVC的缺点 MVC介绍 MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。...使用MVC的目的:在于将M和

    MVC介绍

    MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

    MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器。

    使用的MVC的目的:在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如Windows系统资源管理器文件夹内容的显示方式,下面两张图中左边为详细信息显示方式,右边为中等图标显示方式,文件的内容并没有改变,改变的是显示的方式。不管用户使用何种类型的显示方式,文件的内容并没有改变,达到M和V分离的目的。

    在这里插入图片描述

    在网页当中,

    V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。

    M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

    C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

    在这里插入图片描述

    户首先在界面中进行人机交互,然后请求发送到控制器,控制器根据请求类型和请求的指令发送到相应的模型,模型可以与数据库进行交互,进行增删改查操作,完成之后,根据业务的逻辑选择相应的视图进行显示,此时用户获得此次交互的反馈信息,用户可以进行下一步交互,如此循环。

    MVC举例

    MVC举例一:

    最典型的MVC就是jsp+servlet+javabean模式。

    JavaBean作为模型,既可以作为数据模型来封装业务数据,又可以作为业务逻辑模型来包含应用的业务操作。其中,数据模型用来存储或传递业务数据,而业务逻辑模型接收到控制器传过来的模型更新请求后,执行特定的业务逻辑处理,然后返回相应的执行结果。

    JSP作为表现层,负责提供页面为用户展示数据,提供相应的表单(Form)来用于用户的请求,并在适当的时候(点击按钮)向控制器发出请求来请求模型进行更新。

    Serlvet作为控制器,用来接收用户提交的请求,然后获取请求中的数据,将之转换为业务模型需要的数据模型,然后调用业务模型相应的业务方法进行更新,同时根据业务执行结果来选择要返回的视图。

    MVC举例二:

    Struts2框架:Struts2是基于MVC的轻量级的web应用框架。Struts2的应用范围是Web应用,注重将Web应用领域的日常工作和常见问题抽象化,提供一个平台帮助快速的完成Web应用开发。基于Struts2开发的Web应用自然就能实现MVC,Struts2着力于在MVC的各个部分为开发提供相应帮助。

    下面通过代码来简单解释一下:

    Login.html

    在这里插入图片描述

    Login.java

    在这里插入图片描述

    Struts.xml

    在这里插入图片描述

    解释
    用户首先在Login.html中输入用户名和密码,点击登陆,此时根据action的路径,在struts.xml中找到对应的Login,然后根据对应的class的路径进入相应的login.Java,在这里判断之后,返回success或error,然后根据struts.xml中的result值,指向相应的jsp页面。

    在这里插入图片描述

    控制器——filterdispatcher

    从上面这张图来看,用户请求首先到达前端控制器FilterDispatcher。FilterDispatcher负责根据用户提交的URL和struts.xml中的配置,来选择合适的动作(Action),让这个Action来处理用户的请求。FilterDispatcher其实是一个过滤器(Filter,servlet规范中的一种web组件),它是Struts2核心包里已经做好的类,不需要我们去开发,只是要在项目的web.xml中配置一下即可。FilterDispatcher体现了J2EE核心设计模式中的前端控制器模式。

    动作——Action

    在用户请求经过FilterDispatcher之后,被分发到了合适的动作Action对象。Action负责把用户请求中的参数组装成合适的数据模型,并调用相应的业务逻辑进行真正的功能处理,获取下一个视图展示所需要的数据。Struts2的Action,相比于别的web框架的动作处理,它实现了与Servlet API的解耦,使得Action里面不需要再直接去引用和使用HttpServletRequest与HttpServletResponse等接口。因而使得Action的单元测试更加简单,而且强大的类型转换也使得我们少做了很多重复的工作。

    视图——Result

    视图结果用来把动作中获取到的数据展现给用户。在Struts2中有多种优秀的结果展示方式,常规的jsp,模板freemarker、velocity,还有各种其它专业的展示方式,如图表jfreechart、报表JasperReports、将XML转化为HTML的XSLT等等。而且各种视图结果在同一个工程里面可以混合出现。

    MVC举例三:

    ASP.NET MVC

    在visual studio当中新建一个ASP.NET MVC web应用程序

    在这里插入图片描述
    创建的项目当中即有controllers,models和views,体现了MVC的编程思想。
    在这里插入图片描述

    MVC优点

    1.耦合性低

    视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。

    2.重用性高

    MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。

    3.部署快,生命周期成本低

    MVC使开发和维护用户接口的技术含量降低。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。

    4.可维护性高

    分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。

    MVC的缺点

    1.完全理解MVC比较复杂。

    由于MVC模式提出的时间不长,加上同学们的实践经验不足,所以完全理解并掌握MVC不是一个很容易的过程。

    2.调试困难。

    因为模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难,每个构件在使用之前都需要经过彻底的测试。

    3.不适合小型,中等规模的应用程序

    在一个中小型的应用程序中,强制性的使用MVC进行开发,往往会花费大量时间,并且不能体现MVC的优势,同时会使开发变得繁琐。

    4.增加系统结构和实现的复杂性

    对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

    5.视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问

    视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

    依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

    展开全文
  • MVC模式概述

    2019-09-03 22:46:22
    一、MVC模式简介 1.1 MVC概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种设计模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC...
  • MVC模式

    千次阅读 2019-12-09 19:23:49
    MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,...
  • 本地使用必读 本地使用前,请先配置自己数据库,并更新DBHelper中的数据库连接信息 系统内置管理员用户:用户名6001,密码123456...如果使用钉钉扫码,请将本地域名重定向 钉钉回调域名: ...将本地域名重定向后,直接访问
  • Spring MVC 访问不同路径的页面

    万次阅读 2020-01-14 17:34:15
    MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:Model(模型)表示应用程序核心(比如数据库记录列表)。是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象...
  • 就是使用asp.net core使用c#创建Restful服务,就是webapi,如果要使用webapi控制器 webapi中的控制器是派生自ControllerBase的类, ControllerBase类 不要通过从 Controller 类派生来创建 Web API 控制器。 ...
  • c# 进阶之 WebAPI

    千次阅读 2018-04-24 15:07:35
    c# 进阶之 WebAPIREST是设计风格而不是标准。webapi有自己的路由。...(1)非常适合做http的请求,前端与webapi交互特别方便(2)webapi更轻量因为使用的json数据来传递。(3)webapi很多时候是给前端提供数据的,因...
  • 设计模式3-MVC设计模式

    千次阅读 2020-04-16 19:19:46
    MVC设计模式 MVC的全名是Model View Controller,是模型(Model)-视图(view)-控制器(controller)的缩写,是一种设计模式。它是用一种业务逻辑、数据与界面显示分离的方法来组织...使用MVC的目的:它将这些对象、...
  • 【JavaWeb】MVC模式和JSP开发模型

    千次阅读 2020-04-29 23:25:15
    MVC模式和JSP开发模型第一节 MVC模式简介1.1 MVC概念1.2 MVC模式详解1.3 MVC高级框架应用1.4 MVC和三层架构的区别第二节 JSP开发模型2.1 JavaWeb经历两个时期2.1.1 JSP Model12.1.2 JSP Model22.2 基于MVC的三层架构...
  • Python Django 强大的web mvc开发框架

    千次阅读 2019-11-25 23:57:54
    Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于...
  • 使用webapi做rest的服务接口时,有些读取数据表的操作,数据本身变化不频繁,但是访问量却不小,比如频道分类,地市选择信息等等等等。这时,必然想到使用缓存。  在普通controller下,由于controller实现了一堆...
  • 分析了ASP .NET平台默认 MVC架构模式缺陷,结合Ajax和 Web Service的技术特点,在ASP .NET平台改进了 MVC,实现了 AWS MVC架构模式,将 ASP.NET中B/ S结构细化为表示层、页面接口层、服务接口层、业务逻辑层、数据访问层...
  • Javaweb中的MVC设计模式

    千次阅读 2019-10-17 15:00:40
    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 MVC模式最早为Trygve Reenskaug提出,为施乐帕罗奥多研究...
  • MVC 设计模式概述

    万次阅读 多人点赞 2016-11-22 21:54:13
    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型 (Model)、视图(View)和控制器(Controller)。MVC模式最早为Trygve Reenskaug提出,为施乐帕罗奥多研究...
  • WebApi、WebService、RestApi

    千次阅读 2021-06-22 13:39:44
    1.WebApi 也可叫做HTTPService,基于HTTP协议,我们日常网站、系统都是使用这种形式进行访问我们的应用程序。在处理数据上WebApi效率较高。WebApi无状态,相对WebService更轻量级。 HTTP-GET 和 HTTP-POST HTTP-GET...
  • 前言:servlet/JSP技术仍然在javaweb开发中占据一席之地,尽管出现大量框架,如struts2,springMVC这样的MVC框架,也很有必要弄懂这项技术,下面我将以自己的理解来详细说明一下servlet/JSP和MVC模式。第一章:MVC...
  • MVCweb MVC、Spring MVC 和 Spring Web MVC的联系与区别: 1.MVC 是一种架构分层模式 2.web MVC 是指在 web 领域下...在 Spring Framework 介绍页面 写的是 Spring MVC,然而点进去后具体的描述页面 使用 Spring We
  • WebAPI接口调试技巧

    万次阅读 2017-09-05 17:01:45
    接口模式:基于MVC4.0的WebAPI 承载协议:HTTP 跟踪工具:IE11 请求方式:POST 请求URL:IP:Port/Application/Controller/ActionName/Parameters 请求参数:一串由JSON对象转化而成的字符串 响应状态:200(OK) ...
  • C#MVC调用API授权登录

    千次阅读 2019-03-29 18:59:30
    1.创建API项目(使用工厂模式+EF+反射) 2.在数据访问层创建EF的上下文 4.在数据防层创建类调用EF的上下文 5.创建业务逻辑层 调用数据访问层和模型层 6.创建API控制器 7.创建登录方法(调用业务逻辑层) 这个是...
  • 一、MVC设计模式1.MVC的概念首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。...
  • Web API 入门指南

    万次阅读 多人点赞 2018-06-28 19:08:50
    Web API是一个比较宽泛的概念。这里我们提到Web API特指ASP.NET Web API。这篇文章中我们主要介绍Web API的主要功能以及与其他同类型框架的对比,最后通过一些相对复杂的实例展示如何通过Web API构建http服务,同时...
  • Servlet与JSP以及MVC设计模式

    千次阅读 2017-09-28 11:57:22
    一、设计模式是什么?Servlet(Server + Applet):java服务器端小程序 用java编写的服务器端程序,接收用户的请求并作出响应.阅读JavaEE_6_API帮助文档.chm 中servlet的含义上面的文档包含了JavaEE的全部技术也可以...
  • 接上一次的:【c#/MVC】运用MVC模式,做一个增删查改简单数据库,以及涉及到的知识,本次将部分原本的业务逻辑层和数据访问层剥离出来,单独作为一个API,挂到IIS上,然后访问。 阅读帮助: 重点内容为红色加粗...
  • WEB MVC简介

    千次阅读 2018-06-02 16:33:08
    3.webMVC概述 4.web端开发发展历史 1.web开发中的请求_响应模型: 在web世界里,具体步骤如下: web浏览器发起请求。 web服务器接收请求,返回内容给web客户端,最后产生响应 web服务器处理完成后,返回...
  • 三层架构是一个分层式的软件体系架构设计,可适用于任何一... * 三层架构模式: 所谓三层是表述层(WEB层)、业务逻辑层(Business Logic),以及数据访问层(Data Access)  l WEB层(表现层):包含JSP和Servl...
  • 简单了解 前端构架模式MVC与MVVM

    千次阅读 2021-03-03 05:06:40
    MVC不是框架,不是设计模式,也不是软件架构,而是一种架构模式MVC的出现是为了让应用的业务逻辑、数据和界面显示分离的方法来组织代码。 Model-View-ViewModel的缩写,而本质上还是MVC的改进版。其设计思想是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,474
精华内容 15,389
关键字:

webapi使用mvc模式访问页面