Spring_MVC_控制器方法返回值与视图的关系
ASP.NETMVC5基础-控制器(Controller)详解

MVC5基础-控制器(Controller)详解在上⽂中我们简单了解了下控制器Controller的作⽤,本⽂我将详细介绍控制器Controller的使⽤⽅法。
Controller的运⾏过程上⽂我们已经讲到,控制器负责响应浏览器传送过来的所有请求。
在MVC中,每⼀个浏览器请求都映射到⼀个控制器(Controller)中,每个请求都会有个动作(Action),只要动作存在,就可以通过该动作⽅法接收客户端传来的请求与决定响应的视图(View)。
我们以之前创建的MVC项⽬为例,打开项⽬的Index.cshtml页⾯。
显⽰的界⾯如下:根据路由规则,Home是控制器(Controller)名,Index是动作(Action)名。
所以这个URL调⽤的是HomeController控制器下的Index⽅法。
在Index⽅法中,只有这么⼀⾏代码:return View();,表⽰返回视图,然后返回给浏览器的是Views/Home⽂件夹下的Index.cshtml页⾯。
虽然我们在Index⽅法中没有指定返回哪个页⾯,但根据 MVC的约定规则,控制器会找到Views⽂件夹中,与Controller名称相同⽂件夹下的同⼀⽅法名的页⾯。
所以返回的是Home下的Index.cshtml页⾯。
具体的有关控制器返回View的内容下⽂会详细说明。
控制器的运⾏过程⼤体如上,从浏览器请求到控制器返回结果的整体流程为:Controller请求参数处理那么在Index⽅法中,正常情况我们可以通过Request.QueryString获取到这两个参数。
如下:public ActionResult Index(){var name = Request.QueryString["name"];var age = Request.QueryString["age"];return Content($"name:{name},age:{age}");}public ActionResult Index(string name,int age){return Content($"name:{name},age:{age}");}打开页⾯输出结果还是⼀样的:相同的,如果浏览器通过POST⽅式传过来⼀个表单,那么我们也可以在Index参数中使⽤表单对应的Model实体类来接收。
springMVC执行流程

一、执行流程
1、客户发起请求(request)到前端控制器
2、前端控制器请求handlermapping来查找对应的handler<控制器>
(通过xml配置和注解的方式)
3、处理映射器根据查找的结果向前端控制器返回一个mapper
4、前端控制器去调用处理器去执行handler
5、处理器适配器执行handler
6、Handler执行完给处理器适配器返回一个modelandview
7、处理器适配器向前端控制器返回model and view
8、前端控制器请求视图解析器去进行视图解析(根据逻辑视图名解析成实际的逻辑视图jsp)
9、视图解析器给前端控制器返回一个view
10、前端控制器进行视图渲染
视图渲染将数据模型(存放在modelandview对象中)填充到request域11、前端控制器向用户响应结果(response)
二、核心组件
一、前端控制器(DispatcherServlet)
接收请求,转发结果,相当与一个转发器,中央处理器,不存在任何业务逻辑二、处理器映射器(handlerMapping)
根据请求的URL查找handler
三、处理器适配器(handlerAdapter)
按照特定的规则(handlerAdapter要求的规则)去执行handler,编写handler时必须按照handlerAdapter的要求,否则无法执行handler
四、视图解析器(ViewResolver)
进行视图解析,根据逻辑视图名转换成物理视图
五、视图(View)
View是一个接口,实现类支持不同类型的视图类型(jsp、PDF)。
controller中的定义

controller中的定义控制器(Controller)是MVC架构中的一部分,用于处理用户请求并返回响应。
它作为模型和视图之间的中介者,负责协调应用程序的行为。
在Web开发中,控制器通常是一个类或一组类,负责处理HTTP 请求并生成HTTP响应。
1. 控制器的作用控制器扮演着连接模型和视图的桥梁。
它接收来自用户的请求,并根据请求调用相应的模型和视图来生成响应。
控制器还可以处理数据验证、身份验证、会话管理等任务。
2. 控制器的工作原理当用户发送HTTP请求时,Web服务器将该请求转发给相应的控制器。
控制器根据请求类型(GET、POST等)以及URL参数来确定要执行哪个操作。
然后,它将调用相应的模型来获取数据,并将数据传递给视图以生成HTML响应。
3. 控制器与路由之间的关系路由(Route)是一个URL映射到控制器方法或动作(Action)的机制。
在MVC架构中,路由通常由一个独立组件负责管理。
当用户访问某个URL时,路由将该URL映射到相应的控制器方法或动作。
4. 控制器与模型之间的关系模型(Model)是用于处理应用程序数据的组件。
控制器可以调用模型来获取、更新或删除数据。
在MVC架构中,模型通常包含与数据库交互的代码。
5. 控制器与视图之间的关系视图(View)是用户界面的一部分,负责显示数据和响应用户操作。
控制器可以调用视图来生成HTML响应,并将数据传递给视图以显示。
6. 控制器的命名规则在MVC架构中,控制器通常采用以下命名规则:控制器名称+Controller。
例如,UserController表示用户控制器。
7. 控制器的方法和动作控制器方法或动作是处理HTTP请求的代码块。
每个动作都对应一个URL,并且可以接收GET或POST请求。
在MVC架构中,每个动作通常返回一个HTML响应。
8. 控制器的生命周期控制器对象在每个HTTP请求期间创建,并在请求结束后销毁。
这意味着每个请求都有自己独立的控制器实例。
什么是SpringMVC?

什么是SpringMVC?⼀、什么是SpringMVC?1.SpringMVC 是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 中。
2.SpringMVC = Spring +MVCspring mvc类似于struts的⼀个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为⽀撑才能跑起来.spring是⼀个⼀站式的框架,提供了表现层(springmvc)到业务层(spring)再到数据层(springdata)的全套解决⽅案;spring的两⼤核⼼IOC(控制反转)和AOP(⾯向切⾯编程)更是给我们的程序解耦和代码的简介提供了⽀持。
Spring框架图:从Spring的结构图可以看出,springMVC位于spring web端的⼀个框架,是⼀种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦。
附:基于请求驱动指的就是使⽤请求-响应模型。
从名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是⼀种⽗⼦关系。
SpringMVC是spring扩展出的⼀个应⽤于web端的框架。
在这⾥需要注意的⼀点,就是到底什么是⽗⼦容器关系:spring主要的作⽤是黏合其他模块组件,进⾏统⼀管理,springmvc则主要是负责web端。
那么,我们都知道,我们在应⽤spring的时候,可以使⽤注⼊。
这个时候,如果我们的web端是⽤的SpringMVC,这个时候,controller理论上是通过SpringMVC去注⼊,但是,使⽤spring注⼊,同样是可⾏的。
同理,service等层,使⽤SpringMVC配置的统⼀扫描装配也是可以的。
什么是MVC

什么是MVC
springMVC流程
什么是MVC
MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是⼀种软件设计规范。
是将业务逻辑、数据、显⽰分离的⽅法来组织代码。
MVC主要作⽤是降低了视图与业务逻辑间的双向耦合。
MVC不是⼀种设计模式,MVC是⼀种架构模式。
不同的MVC存在差异。
Model(模型):数据模型,提供要展⽰的数据,因此包含数据和⾏为,可以认为是领域模型或JavaBean组件(包含数据和⾏为),不过现在⼀般都分离开来:Value Object(数据Dao)和服务层(⾏为Service)。
也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View(视图):负责进⾏模型的展⽰,⼀般就是我们见到的⽤户界⾯,客户想看到的东西。
Controller(控制器):接收⽤户请求,委托给模型进⾏处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展⽰。
也就是说控制器做了个调度员的⼯作。
最典型的MVC就是JSP + servlet + javabean的模式。
controller 的实现方式

controller 的实现方式Controller的实现方式在MVC架构中,Controller是负责处理用户请求并返回响应的组件。
它是Model和View之间的桥梁,负责将用户请求转化为对Model 的操作,并将Model的结果传递给View进行展示。
在本文中,我们将介绍Controller的实现方式。
1. 基于Servlet的Controller实现方式在Java Web应用中,Controller通常是基于Servlet实现的。
Servlet是Java Web应用中的一种组件,它可以接收HTTP请求并返回HTTP响应。
在基于Servlet的Controller实现方式中,Controller是一个Servlet,它负责接收用户请求并将请求转化为对Model的操作。
在处理完请求后,Controller将Model的结果传递给View进行展示。
2. 基于Spring MVC的Controller实现方式Spring MVC是一种基于MVC架构的Web框架,它提供了一种更加灵活和高效的Controller实现方式。
在基于Spring MVC的Controller实现方式中,Controller是一个Java类,它使用注解来处理用户请求。
Spring MVC提供了一系列的注解,如@RequestMapping、@PathVariable、@RequestParam等,用于处理不同类型的请求。
在处理完请求后,Controller将Model的结果传递给View进行展示。
3. 基于RESTful API的Controller实现方式RESTful API是一种基于HTTP协议的Web服务架构,它使用HTTP请求来进行资源的操作。
在基于RESTful API的Controller实现方式中,Controller是一个RESTful API,它负责接收HTTP请求并将请求转化为对Model的操作。
在处理完请求后,Controller将Model的结果以JSON或XML格式返回给客户端。
MVC控制器向View传值的三种方法(转)C#

MVC控制器向View传值的三种⽅法(转)C#1.提供视图模型对象你能把⼀个对象作为View⽅法的参数传递给视图.1 2 3 4 5public ViewResult Index(){DateTime date = DateTime.Now; return View(date);} 然后我们在视图中使⽤Razor的Model来访问这个对象@{ViewBag.Title = "Index";}<h2>Index</h2>The day is: @(((DateTime)Model).DayOfWeek)或者是@model DateTime@{ViewBag.Title = "Index";}<h2>Index</h2>The day is: @Model.DayOfWeek2.使⽤ViewBag(视图包)传递数据View Bag 允许在⼀个动态的对象上定义任意属性,并在视图中访问它.这个动态的对象可以通过Controller.ViewBag属性访问它.public ViewResult Index(){ViewBag.Message = "Hello";ViewBag.Date = DateTime.Now;return View();}@{ViewBag.Title = "Index";}<h>Index</h>The day is: @ViewBag.Date.DayOfWeek<p />The message is: @ViewBag.Message3. 使⽤View Data传递数据在3.0之前,主要是通过这种⽅式传递数据,它是通过⽤ ViewDataDictionary类实现的,⽽不是动态的对象.ViewDataDictionary类是类似标准"键/值"集合,并通过Controller类的ViewData属性进⾏访问的.这个⽅法,在视图中需要对对象进⾏转换.控制器中:public ViewResult Index(){ViewData["Message"] = "Hello";ViewData["Date"] = DateTime.Now;return View();}视图中:@{ViewBag.Title = "Index";}<h2>Index</h2>The day is: @(((DateTime)ViewData["Date"]).DayOfWeek)<p />The message is: @ViewData["Message"]。
详解SpringMVC中Controller的方法中参数的工作原理

详解SpringMVC中Controller的⽅法中参数的⼯作原理前⾔SpringMVC是⽬前主流的Web MVC框架之⼀。
SpringMVC中Controller的⽅法参数可以是Integer,Double,⾃定义对象,ServletRequest,ServletResponse,ModelAndView等等,⾮常灵活。
本⽂将分析SpringMVC是如何对这些参数进⾏处理的,使读者能够处理⾃定义的⼀些参数。
现象本⽂使⽤的demo基于maven。
我们先来看⼀看对应的现象。
@Controller@RequestMapping(value = "/test")public class TestController {@RequestMapping("/testRb")@ResponseBodypublic Employee testRb(@RequestBody Employee e) {return e;}@RequestMapping("/testCustomObj")@ResponseBodypublic Employee testCustomObj(Employee e) {return e;}@RequestMapping("/testCustomObjWithRp")@ResponseBodypublic Employee testCustomObjWithRp(@RequestParam Employee e) {return e;}@RequestMapping("/testDate")@ResponseBodypublic Date testDate(Date date) {return date;}}⾸先这是⼀个Controller,有4个⽅法。
他们对应的参数分别是带有@RequestBody的⾃定义对象、⾃定义对象、带有@RequestParam的⾃定义对象、⽇期对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.Spring控制器@Controller方法返回值一般是String或者ModelAndView
2.或者Ajax请求@ResponseBody也可以返回Java对象或者void
3.如果以上2种情况都不是,就是一个普通方法:返回值没有明确指出本次请求结束后应该定
向到那个页面。那么Spring会根据RequestToViewNameTranslator技术:
类层级的RequestMappingValue+方法层级的RequestMappingValue+视图模型后缀
作为本次请求结束后要定向的页面。
方式 返回值 视图说明 页面取值方式
1 void
prefix前缀+@RequestMapping value +suffix后缀组成 根据key取值,如
${key}
2 String
根据String
字符串返回
对应的地址
prefix前缀+
返回值
+suffix后缀
组成
3 ModelAndView
通过
setViewNam
e方法跳转
到指定的页
面
4 ModelMap
同1
Model
同1
4 Map
同1
5 List
同1 以第一个存入对象的
Object.getClass().getSimp
leName()+List,如左图所
示,取值方式为
${stringList[0]}
${stringList[1].username}
6 Set
同1 同5
7 Connection
同1 比较复杂,见方式7
8 Object
同1 比较复杂,见方式8
方式7:
方式8: