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中申请数据的获取和响应数据处理的一个根本过程。