【Java】SpringBoot工程下的Spring-MVC应用

SpringBoot工程下的Spring-MVC应用

亮亮发布于 52 分钟前

Spring MVC 简介

背景分析

在大型软件系统设计时,业务一般会相对复杂,假如所有业务实现的代码都纠缠在一起,会出现逻辑不清晰、可读性差,维护困难,改动一处就牵一发而动全身等问题。为了更好解决这个问题就有了我们现在常说的分层架构设计。

MVC 是什么

MVC是一种软件架构设计思想,基于MVC架构将我们的应用软件进行分层设计和实现,例如可以分为视图层(View),控制层(Controller),模型层(Model),通过这样的分层设计让我们程序具备更好的灵活性和可可扩展性.因为这样可以将一个复杂应用程序进行简化,实现各司其职,各尽所能.比较适合一个大型应用的开发.

Spring MVC 概述

Spring MVC是MVC设计思想在Spring框架中的一种实现,基于这样的思想spring框架设计了一些相关对象,用于更好的基于MVC架构处理请求和响应,其简易架构如图所示:

【Java】SpringBoot工程下的Spring-MVC应用

其中:
1)DispatcherServlet是客户端所有请求处理的入口,负责请求转发。
2)RequestMapping负责存储请求url到后端handler对象之间的映射。
3)Handler 用于处理DispatcherServlet对象转发过来的请求数据。
4)ViewResolver负责处理所有Handler对象响应结果中的view。

Spring MVC 快速入门

准备工作

第一步:创建项目module,基本信息如图所示:

【Java】SpringBoot工程下的Spring-MVC应用

第二步:添加项目依赖(可以在module创建时,也可以创建后),代码如下:

Spring Web 依赖(提供了spring mvc支持并且会嵌入一个tomcat)

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

Thymeleaf 依赖(提供了以html作为页面模板进行解析和操作的相关对象)

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

第三步:启动项目检测控制台启动状态是否OK

static 目录分析及应用

static 目录为springboot工程创建时添加了web依赖以后自动创建的目录,此目录中可以存储html、css、js、image,这些资源可以在启动服务器以后,直接在浏览器进行访问。例如:
第一步:在static目录下创建一个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>

第二步:启动服务器并直接进行访问测试,如图所示

【Java】SpringBoot工程下的Spring-MVC应用

templates 目录分析及应用

templates 目录为springboot工程创建时添加了thymeleaf依赖以后自动创建的目录,此目录中要存储一些html模板,这个模板页面不能直接通过浏览器url进行访问,需要基于后端控制器,在方法中定义页面响应,例如:

第一步:定义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目录中定义模板页面default.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/

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

【Java】SpringBoot工程下的Spring-MVC应用

第四步:访问过程中的BUG分析

【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

第五步:thymeleaf页面缓存设置
假如我们希望在修改了页面内容以后,不重新启动服务,直接刷新即可看页面改动,可以执行如下操作:
修改配置文件内容,添加如下语句:

spring.thymeleaf.cache=false

修改idea默认配置,允许自动编译,如图所示:
【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

SpringMVC 响应数据处理

ModelAndView 应用

我们有一业务,现在需要将响应数据封装到ModelAndView对象,然后响应到客户端,如何实现呢?

第一步:定义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 "view";

}

}

第二步:在templates相关目录下定义view.html,并在页面中添加呈现数据的代码,例如:

 <div>

<ul>

<li>username:[[${username}]]</li>

<li>state:[[${state}]]</li>

</ul>

</div>

第三步:启动项目进行访问测试,并检测输出结果,例如:

【Java】SpringBoot工程下的Spring-MVC应用

第四步:运行过程中的结果分析

【Java】SpringBoot工程下的Spring-MVC应用

JSON数据响应

我们有一业务不需要页面,只需要将响应数据转换为json,然后响应到客户端,如何实现呢?
第一步:定义ResponseResult对象用于封装响应数据,例如:

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);

}

}

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

【Java】SpringBoot工程下的Spring-MVC应用

第四步:启动或访问过程中的问题分析

【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

SpingMVC 请求参数数据处理

我们在执行业务的过程中通常会将一些请求参数传递到服务端,服务端如何获取参数并注入给我们的方法参数的呢?

准备工作

定义一个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 {}

直接量方式

在ParamObjectController中添加方法,基于直接量方式接受客户端请求参数,例如:

@GetMapping("/doParam01")

public String doMethodParam(String name){

return "request params "+name;

}

访问时,可以这样传参,例如:

http://localhost/doParam01?name=beijing

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?name=beijing

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?name=beijing

总结(Summary)

本章节对springboot工程下spring mvc技术的应用做了一个入门实现,并结合实际项目中的业务应用,讲解了MVC中请求数据的获取和响应数据处理的一个基本过程.

springboot

javaspring-mvcspringboot

阅读 23发布于 52 分钟前

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

亮亮

学而要所获,必然明其理,知其然。

4 声望

1 粉丝

0 条评论

得票时间

avatar

亮亮

学而要所获,必然明其理,知其然。

4 声望

1 粉丝

宣传栏

Spring MVC 简介

背景分析

在大型软件系统设计时,业务一般会相对复杂,假如所有业务实现的代码都纠缠在一起,会出现逻辑不清晰、可读性差,维护困难,改动一处就牵一发而动全身等问题。为了更好解决这个问题就有了我们现在常说的分层架构设计。

MVC 是什么

MVC是一种软件架构设计思想,基于MVC架构将我们的应用软件进行分层设计和实现,例如可以分为视图层(View),控制层(Controller),模型层(Model),通过这样的分层设计让我们程序具备更好的灵活性和可可扩展性.因为这样可以将一个复杂应用程序进行简化,实现各司其职,各尽所能.比较适合一个大型应用的开发.

Spring MVC 概述

Spring MVC是MVC设计思想在Spring框架中的一种实现,基于这样的思想spring框架设计了一些相关对象,用于更好的基于MVC架构处理请求和响应,其简易架构如图所示:

【Java】SpringBoot工程下的Spring-MVC应用

其中:
1)DispatcherServlet是客户端所有请求处理的入口,负责请求转发。
2)RequestMapping负责存储请求url到后端handler对象之间的映射。
3)Handler 用于处理DispatcherServlet对象转发过来的请求数据。
4)ViewResolver负责处理所有Handler对象响应结果中的view。

Spring MVC 快速入门

准备工作

第一步:创建项目module,基本信息如图所示:

【Java】SpringBoot工程下的Spring-MVC应用

第二步:添加项目依赖(可以在module创建时,也可以创建后),代码如下:

Spring Web 依赖(提供了spring mvc支持并且会嵌入一个tomcat)

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

Thymeleaf 依赖(提供了以html作为页面模板进行解析和操作的相关对象)

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

第三步:启动项目检测控制台启动状态是否OK

static 目录分析及应用

static 目录为springboot工程创建时添加了web依赖以后自动创建的目录,此目录中可以存储html、css、js、image,这些资源可以在启动服务器以后,直接在浏览器进行访问。例如:
第一步:在static目录下创建一个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>

第二步:启动服务器并直接进行访问测试,如图所示

【Java】SpringBoot工程下的Spring-MVC应用

templates 目录分析及应用

templates 目录为springboot工程创建时添加了thymeleaf依赖以后自动创建的目录,此目录中要存储一些html模板,这个模板页面不能直接通过浏览器url进行访问,需要基于后端控制器,在方法中定义页面响应,例如:

第一步:定义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目录中定义模板页面default.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/

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

【Java】SpringBoot工程下的Spring-MVC应用

第四步:访问过程中的BUG分析

【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

第五步:thymeleaf页面缓存设置
假如我们希望在修改了页面内容以后,不重新启动服务,直接刷新即可看页面改动,可以执行如下操作:
修改配置文件内容,添加如下语句:

spring.thymeleaf.cache=false

修改idea默认配置,允许自动编译,如图所示:
【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

SpringMVC 响应数据处理

ModelAndView 应用

我们有一业务,现在需要将响应数据封装到ModelAndView对象,然后响应到客户端,如何实现呢?

第一步:定义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 "view";

}

}

第二步:在templates相关目录下定义view.html,并在页面中添加呈现数据的代码,例如:

 <div>

<ul>

<li>username:[[${username}]]</li>

<li>state:[[${state}]]</li>

</ul>

</div>

第三步:启动项目进行访问测试,并检测输出结果,例如:

【Java】SpringBoot工程下的Spring-MVC应用

第四步:运行过程中的结果分析

【Java】SpringBoot工程下的Spring-MVC应用

JSON数据响应

我们有一业务不需要页面,只需要将响应数据转换为json,然后响应到客户端,如何实现呢?
第一步:定义ResponseResult对象用于封装响应数据,例如:

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);

}

}

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

【Java】SpringBoot工程下的Spring-MVC应用

第四步:启动或访问过程中的问题分析

【Java】SpringBoot工程下的Spring-MVC应用

【Java】SpringBoot工程下的Spring-MVC应用

SpingMVC 请求参数数据处理

我们在执行业务的过程中通常会将一些请求参数传递到服务端,服务端如何获取参数并注入给我们的方法参数的呢?

准备工作

定义一个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 {}

直接量方式

在ParamObjectController中添加方法,基于直接量方式接受客户端请求参数,例如:

@GetMapping("/doParam01")

public String doMethodParam(String name){

return "request params "+name;

}

访问时,可以这样传参,例如:

http://localhost/doParam01?name=beijing

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?name=beijing

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?name=beijing

总结(Summary)

本章节对springboot工程下spring mvc技术的应用做了一个入门实现,并结合实际项目中的业务应用,讲解了MVC中请求数据的获取和响应数据处理的一个基本过程.

springboot

以上是 【Java】SpringBoot工程下的Spring-MVC应用 的全部内容, 来源链接: utcz.com/a/113698.html

回到顶部