乐趣区

关于spring-mvc:SpringMVC

Spring MVC 简介

MVC 是什么

mvc 是一种软件架构设计思维,基于 MVC 架构将咱们的应用软件进行分层设计和实现,

@ResponseBody

过后应用此注解形容管制层办法时,用于通知 spring 框架,这个办法返回字符串尽量转换为 json 字符串到客户端

理论我的项目中既有页面 还有数据

当应用此注解形容管制层办法时,用于 spring 框架,这个办法返回值能够依照特定格局(例如 json) 进行转换

而后将转换当前的后果写到 response 对象的响应体中

办法的返回值不在封装为 ModelAndView 对象,不会再交给解析器进行解析,而是间接基于 response 对象响应到客户端

背景剖析

在大型软件系统设计时,业务个别会绝对简单,例如所有的业务实现的代码都纠缠在一起,会突出

逻辑不清晰,可读性差,保护艰难,改变一处就牵一动员全身等问题。为了更好解决这个问题就有

了咱们当初常说的分层架构

MVC 是什么

mvc 是一种软件架构的设计思维,基于 MVC 架构将咱们的应用软件进行分层设计和实现,例如能够

分为视图层(view) 管制层(controller), 模型层(model),通过这样的分层设计让咱们的程序有更

好的灵活性,和可扩展性,因为这样能够讲一个简单的应用程序进行简化实现各司其职,各尽所能比拟适宜一些大型利用的开发。

Spring MVC 概述

springmvc 是 mvc 设计思维在 spring 框架中的一种实现,基于这样的思维 spring 框架设计一些相干

对象,用于更好的基于 mvc 架构解决和响应,其简略架构如下图所示

其中:

1)DispatcherServlet 是负责客户端所有申请的一个解决的入口,负责申请和转发,

2)RequestMapping 负责贮存申请 url 到后端服务器 handler 对象对象之间的映射。

3)Handler 用于解决 DispatcherServlet 对象转发过去的申请数据。

4)ViewResolver 负责解决所有的 Handler 对象响应后果中的 view。

SpringMVC 疾速入门

第一步 创立 medule

第二步 创立依赖(能够在 module 创立时,也能够在创立后)代码如下

第三步 启动我的项目检测控制台启动状态是否为 ok

Statics 目录剖析及利用

Statics 目录为 Springboot 工程创立时增加 web 依赖当前主动创立的目录,此目录中能够贮存

html,css,js 等相干资源,这些资源能够在启动服务器当前,间接在浏览器上进行拜访。

例如:

第一步:在 statics 目录下创立一个 index.html(首页) 页面,代码如下

<!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>Title</title> </head> <body> <h1>The First Html Page</h1> </body> </html>

第二部:启动服务器并间接进行拜访测试 如图所示:

templates 目录剖析及利用

templates 目录为 springboot 工程创立时天年假了 thymelea 当前主动创立的目录,此目录中要贮存

一些 html 模板,这个模板页面不能间接通过浏览器进行拜访,须要基于后端控制器,在办法中定义

页面响应,例如:

第一步:定义一个 TemplateController 以办法,代码如下:

package com.cy.pj.health.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class TemplateController {@RequestMapping(“doTemplateUI”) public String doTemplateUI(){ return “default”;} }

第二步:在 templates 目录中定义一个模板页面 defalut.html, 代码如下:

<!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>Title</title> </head> <body> <h1>The Default Template page</h1> </body> </html

其中如果 default.html 要放在 templates 子目录中,还要在陪着文件中配置一个 thymeleaf 的前缀:例如

spring.thymeleaf.prefix=classpath:/templates/module/

第三步:启动服务器进行拜访测试,如图所示:

Spring MVC 相应数据处理

ModelAndView 利用

咱们有一套业务,当初须要将相应数据封装到 ModelAndViw 对象,而后在响应到客户端如何实现

第一步定义 ModelViewController 以及办法,代码如下:

package com.cy.pj.module.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ModelViewController {@RequestMapping(“/doModelAndView”) public String doModelAndView(Model model) {model.addAttribute(“username”, “jason”); model.addAttribute(“state”, true); return “default”; } }

第二步:在 default.html 页面中增加出现数据的代码,例如:

<div> <ul> <li>username:[[${username}]]</li> <li>state:[[${state}]]</li> </ul> </div>

第三步:启动我的项目进行拜访测试,并将检测输入后果,例如

JSON 数据响应

咱们有一业务不须要页面,只须要将响应数据转换为 json 字符串,软化响应到客户端如何实现呢?

第一步:定义 ReponseResult 对象用于封装相应数据,例如:

package com.cy.pj.module.pojo; public class ResponseResult {private Integer code; private String message; public Integer getCode() {return code;} public void setCode(Integer code) {this.code = code;} public String getMessage() { return message;} public void setMessage(String message) {this.message = message;} }

第二步:定义 JsonObjectController 以及办法,代码如下:

package com.cy.pj.module.controller; @RestController public class JsonObjectController {@RequestMapping(“/doConvertResponseToJson”) public ResponseResult doConvertResponseToJson(){ ResponseResult rs=new ResponseResult(); rs.setCode(200); rs.setMessage(“OK”); return rs; } @RequestMapping(“/doConvertMapToJson”) public Map<String,Object> doConvertMapToJson(){ Map<String,Object> map=new HashMap<>(); map.put(“username”,” 刘德华 ”); map.put(“state”,true); return map; } @RequestMapping(“/doPrintJSON”) public void doPrint(HttpServletResponse response)throws Exception{Map<String,Object> map=new HashMap<>(); map.put(“username”,” 刘德华 ”); map.put(“state”,true); // 将 map 中的数据转换为 json 格局字符串 ObjectMapper om=new ObjectMapper(); String jsonStr=om.writeValueAsString(map); System.out.println(“jsonStr=”+jsonStr); // 将字符串响应到客户端 // 设置响应数据的编码 response.setCharacterEncoding(“utf-8”); // 通知客户端, 要向它响应的数据类型为 text/html, 编码为 utf-8. 请以这种编码进行数据出现 response.setContentType(“text/html;charset=utf-8”); PrintWriter pw=response.getWriter(); pw.println(jsonStr); } }

第三步:启动服务器别离进行拜访测试,代码如下:

SpringMvc 申请参数数据处理

咱们在执行业务的过程中通常会将一些申请参数传递到服务器,服务器如何获取参数并注入给咱们的

参数办法呢?

筹备工作

定义一个 controller 对象,用于用户解决客户端申请,例如:

package com.cy.pj.module.controller; import com.cy.pj.module.pojo.RequestParameter; import org.springframework.web.bind.annotation.*; import java.util.Map; @RestController public class ParamObjectController {}

间接量的形式

在 paramObjectControllert 中增加办法,基于间接量的形式接管客户端申请参数,例如:

package com.cy.pj.module.controller; import com.cy.pj.module.pojo.RequestParameter; import org.springframework.web.bind.annotation.*; import java.util.Map; @RestController public class ParamObjectController {}

拜访时能够这样传参,例如:

http://localhost/doParam01?na…

Pojo 对象解决形式

定义 pojo 对象,用于接管用户申请参数,例如:

package com.cy.pj.module.pojo; public class RequestParameter {private String name; //…… public String getName() {return name;} public void setName(String name) {this.name = name;} @Override public String toString() { return “RequestParam{” + “name='” + name + ”’ + ‘}’; } }

定义 Controller 办法,办法中应用 pojo 对象接管办法参数,例如:

@RequestMapping(“/doParam02”) public String doMethodParam(RequestParameter param){//pojo 对象接管申请参数,pojo 对象中需提供与参数名相匹配的 set 办法 return “request params “+param.toString(); }

启动服务器进行拜访测试,么能够这样传参 例如:

http://localhost/doParam02?na…

Map 对象形式

有时候咱们不想 应用 pojo 对象接管申请参数,咱们能够用 map 兑现来接管,又该如何实现呢?

定义 Controller 办法基于 map 对象来接管申请参数,例如:

@GetMapping(“/doParam03”) public String doMethodParam(@RequestParam Map<String,Object> param){return “request params “+param.toString(); }

其中,map 接管申请参数,必须用 @RequestParam 对参数进行形容。

启动服务进行拜访测试吗,能够这样传参,例如:

http://localhost/doParam03?na…

总结(Summary)

本章节对 springboot 工程下 spring mvc 技术的利用做了一个入门实现,并结合实际我的项目中的业务

利用,降解率 mvc 中申请数据的获取和响应数据处理的一个根本过程。

退出移动版