【SpringMVC】响应数据 第二期

文章目录

  • 一、handler方法分析
  • 二、页面跳转控制
    • 2.1 快速返回模板视图
    • 2.2 转发和重定向
  • 三、返回JSON数据(重点)
    • 3.1 前置准备
    • 3.2 @ResponseBody
    • 3.3 @RestController
  • 四、返回静态资源处理
    • 4.1 静态资源概念
    • 4.2 静态资源访问和问题解决
  • 总结
    • 混合开发 与 前后端分离
    • @ResponseBody 介绍
    • 手动编译项目


一、handler方法分析

理解handler方法的作用和组成:

  • 一个controller的方法是控制层的一个处理器,我们称为handler
  • handler需要使用@RequestMapping/@GetMapping等,声明路径,在HandlerMapping中注册,供DS查找!
  • handler作用总结 :
    • 1.接收请求参数(param,json,pathVariable,共享域等)
    • 2.调用业务逻辑
    • 3.响应前端数据(页面,json,转发和重定向等)
  • handler如何处理 :
    • 1.接收参数: handler(形参列表: 主要的作用就是用来接收参数)
    • 2.调用业务: { 方法体 可以向后调用业务方法 service.xx() }
    • 3.响应数据: return 返回结果,可以快速响应前端数据
@RequestMapping
public Object handler(简化请求参数接收){调用业务方法返回的结果 (页面跳转,返回数据(json))return 简化响应前端数据;
}

总结:

  1. 请求数据接收,通过handler的形参列表

  2. 前端数据响应,通过handler的return关键字快速处理!

  3. springmvc简化了参数接收和响应!

二、页面跳转控制

2.1 快速返回模板视图

JSP(JavaServer Pages)是一种动态网页开发技术,可以在 HTML 文件中嵌入 Java 代码。
JSP 首次运行时会被转换为 Servlet,然后编译为字节码,从而可以启用 Just-in-Time(JIT)编译器,实现更高效的运行。

  • jsp依赖
<!-- jsp需要依赖! jstl-->
<dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>3.0.0</version>
</dependency>
  • jsp页面创建

1
建议位置:/WEB-INF/下,避免外部直接访问!

位置:/WEB-INF/views/home.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--request.setAttribute("data","hello jsp!")vue {{key}}
--%><h1>${data}</h1>
</body>
</html>
  • 配置jsp视图解析器
@EnableWebMvc   // HandlerAdapter配置JSON转换器
@Configuration
@ComponentScan("com.wake.jsp")
public class MvcConfig implements WebMvcConfigurer {//配置jsp对应的视图解析器@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {//快速配置jsp模板语言对应的// '/WEB-INF/views/'这个会与controller层 类的 return 地址进行拼接 注意 ‘/’ 下划线有没有加registry.jsp("/WEB-INF/views/",".jsp");}
}
  • handler返回视图
@Controller
@RequestMapping("jsp")
public class JspController {// 直接返回给浏览器 不加注解@ResponseBody 不找视图 不走视图解析器@GetMapping("index")public String show(HttpServletRequest request){request.setAttribute("data","Hello JSP ! long time no see !");System.out.println("index JSP");// 返回的是jsp文件名地址(jsp文件名 会跟字符串拼接 -> 查找前端页面(MvcConfig)return "home";}
}

1

2.2 转发和重定向

  • 原生开发 路径细节

    • 转发是项目下的资源跳转,路径-项目下的地址: /jsp/index 可以忽略ApplicationContext
    • 重定向 可以是项目下的资源 也可以是项目外的地址 重定向属于二次请求 路径 - 项目下的地址: 全地址 /springmvc/jsp/index 不忽略ApplicationContext
  • 使用springmvc路径语法

    • forward : 路径 | redirect 路径 转发和重定向 资源地址都不需要写 项目的根路径。
    • 都 忽略ApplicationContext 。直接 /jsp/index
    • 转发和重定向地址都一样。 /springmvc/jsp/index -> 加了就重复了 变成 /springmvc/springmvc/jsp/index 这是错的

注意:
/ 下划线 加没加的问题

1

@Controller
@RequestMapping("jsp")
public class JspController {// 直接返回给浏览器 不加注解@ResponseBody// 该方法地址:/jsp/index@GetMapping("index")public String show(HttpServletRequest request){request.setAttribute("data","Hello JSP ! long time no see !");System.out.println("index JSP");// 返回的是jsp文件名地址(jsp文件名 会跟字符串拼接 -> 查找前端页面(MvcConfig)return "home";}/*** 转发:只能是项目下的资源*  1. 不能添加@ResponseBody注解*  2. 方法返回值是字符串*  3. 返回的字符串前面 forward:/转发地址* @return 转发到其他handler方法*/@GetMapping("forward")public String forward(){System.out.println("JspController.forward! 转发!");return "forward:/jsp/index";}/*** 重定向 : redirect:/重定向地址* @return*/@GetMapping("redirect")public String redirect(){System.out.println("JspController.forward! 重定向!");return "redirect:/jsp/index";}/*** 重定向到项目外地址* @return 重定向到show方法的地址*/@GetMapping("redirect/csdn")public String redirect2(){System.out.println("重定向!CSDN!");return "redirect:https://blog.csdn.net/GavinGroves";}
}

在这里插入图片描述
1

三、返回JSON数据(重点)

1

3.1 前置准备

json依赖

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
</dependency>

MVC配置类中添加json数据转化器

@EnableWebMvc

3.2 @ResponseBody

  • 对象 -》 json -> {}
  • 集合 -》 json -> []

@ResponseBody 返回JSON的注解,可以添加到类和方法上

@Controller
@RequestMapping("json")
@ResponseBody
public class JsonController {@RequestMapping("user")public User userShow() {User user = new User();user.setName("道格");user.setAge(26);
// user -> handlerAdapter -> json -> @ResponseBody -> json直接返回【前后端分离模式】return user; }@RequestMapping("userList")public List<User> userListShow() {User user = new User();user.setName("道格");user.setAge(26);User user1 = new User();user1.setName("维克");user1.setAge(25);List<User> userList = new ArrayList<>();userList.add(user);userList.add(user1);return userList;}
}

1
2
@ResponseBody 数据直接放入响应体返回,也不会走视图解析器。
快速查找视图、转发和重定向都不生效。

3.3 @RestController

@RestController == @Controller + @ResponseBody

1

四、返回静态资源处理

4.1 静态资源概念

资源本身已经是可以直接拿到浏览器上使用的程度了,不需要在服务器端做任何运算、处理

典型的静态资源包括:

  • 纯HTML文件
  • 图片
  • CSS文件
  • JavaScript文件
  • ……

4.2 静态资源访问和问题解决

1
MvcConfig 配置类 开启静态资源查找

    /*** 开启静态资源查找* @param configurer* dispatcherServlet -> handlerMapper 找有没有对应的handler -> 如果没有 就找有没有静态资源*/@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}

存放静态资源:
1
确保编译:
1

结果:直接访问静态资源 -》 显示图片
1

原理:
1
底层是通过转发:
找不到对应的handler方法 就会转发 查找当前项目下的真实资源
1


总结

混合开发 与 前后端分离

1

@ResponseBody 介绍

  • 在方法上使用 @ResponseBody注解,用于将方法返回的对象序列化为 JSON 或 XML 格式的数据,并发送给客户端。
  • 在前后端分离的项目中使用!
  • @ResponseBody 注解可以用来标识方法或者方法返回值,表示方法的返回值是要直接返回给客户端的数据,
    而不是由视图解析器来解析并渲染生成响应体(viewResolver没用)。

手动编译项目

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go go.mod file not found in current directory or any parent directory

场景&#xff1a; 安装好 liteide 之后创建了第一个 “hello world” 的golang 项目&#xff0c;却报了如下错误。 原因分析&#xff1a; go 的环境配置问题。与 golang 的包管理有关。 解决方案&#xff1a; 如果你是 Windows 系统&#xff0c;快捷键 “WinR”&#xff0c…

视频点播系统|基于SSM 框架+ Mysql+Java+B/S架构技术的视频点播系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 系统功能实现 学生前台功能 学生登录、学生注册 个人中心 视频信息 我的收藏 系统公告 教师功能实现 管理员登录 管理员功能实现 视频分类管理 轮播图管理 数据库设计 系统的功能结构图 lumwen参考 概述 源码获取 文末获取源码 系统功能实…

NextJs教程系列(四):路由loading

loading加载 loading.js 可以帮助你使用React Suspense创建一个组件, 当你在加载路由内容时&#xff0c;它会显示该加载状态组件&#xff0c;渲染完成后&#xff0c;新的内容将会自动替换。 传统ssr渲染流程 传统的ssr渲染流程&#xff0c;当用户请求一个页面时&#xff0c;服…

荔枝派zero驱动开发06:GPIO操作(platform框架)

参考&#xff1a; 正点原子Linux第五十四章 platform设备驱动实验 一张图掌握 Linux platform 平台设备驱动框架 上一篇&#xff1a;荔枝派zero驱动开发05&#xff1a;GPIO操作&#xff08;使用GPIO子系统&#xff09; 下一篇&#xff1a;更新中… 概述 platform是一种分层思…

ELK介绍使用

文章目录 一、ELK介绍二、Elasticsearch1. ElasticSearch简介&#xff1a;2. Elasticsearch核心概念3. Elasticsearch安装4. Elasticsearch基本操作1. 字段类型介绍2. 索引3. 映射4. 文档 5. Elasticsearch 复杂查询 三、LogStash1. LogStash简介2. LogStash安装 四、kibana1. …

【企业发展战略】某环境管理集团公司发展战略与规划项目纪实

在集团公司高速发展、业务范围不断扩大时&#xff0c;组织往往对公司未来的发展方向感到迷茫&#xff0c;不知道如何进行更好的规划&#xff0c;找到合适的发展战略&#xff0c;为企业提供更长远的发展空间&#xff0c;带来更多是利益。面对这个问题&#xff0c;华恒智信认为企…

远程在线教育平台从涉及到落地实践

在当前数字化时代&#xff0c;远程在线教育平台正成为教育行业的重要趋势之一。随着互联网技术的不断发展&#xff0c;人们对于灵活、便捷的学习方式需求日益增加&#xff0c;远程在线教育平台为广大学生和教育机构提供了全新的学习和教学模式。然而&#xff0c;要让远程在线教…

uniapp微信小程序获取当前位置

uni-app微信小程序uni.getLocation获取位置&#xff1b;authorize scope.userLocation需要在app.json中声明permission&#xff1b;小程序用户拒绝授权后重新授权-CSDN博客

Python工具小技巧

Python工具小技巧 将.py后缀文件转化为.exe后缀文件安装PyinstallerPyinstaller参数大全 将.py后缀文件转化为.exe后缀文件 目前比较常见的打包exe方法都是通过Pyinstaller来实现的&#xff0c;本文也将使用这种常规方法。 安装Pyinstaller 首先我们要先安装Pyinstaller&…

CSS中em/px/rem/vh/vw区别详解

文章目录 一、介绍二、单位pxemremvh、vw 三、总结 一、介绍 传统的项目开发中&#xff0c;我们只会用到px、%、em这几个单位&#xff0c;它可以适用于大部分的项目开发&#xff0c;且拥有比较良好的兼容性 从CSS3开始&#xff0c;浏览器对计量单位的支持又提升到了另外一个境…

SpringBoot配置文件

在SpringBoot中默认配置文件是在resources目录下的名为application的文件&#xff0c;常用后缀为&#xff1a;.properties、.yml、.yaml 一、指定自己的配置文件 如果把所有的配置文件都放到一个application.properties文件中&#xff0c;难免有些太多&#xff0c;有的时候我们…

【C语言】数据类型和变量

前言&#x1f49e;&#x1f49e; 啦啦啦~这里是土土数据结构学习笔记&#x1f973;&#x1f973; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所属专栏&#xff1a;C语言笔记 &#x1f4a5;欢迎大家&#x1f973;&#x1f973;点赞✨收藏&#x1f49…

Day24:安全开发-PHP应用文件管理模块显示上传黑白名单类型过滤访问控制

目录 文件管理模块-上传-过滤机制 文件管理模块-显示-过滤机制 思维导图 PHP知识点 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0c;资源下载&#xff0c;留言版&#xff0c;后台模块&#xff0c;模版引用&#xff0c;框架开发等 技术&#xff1a;输入输出&#…

[java基础揉碎]方法的重写/覆盖

重写介绍 简单的说:方法覆盖(重写)就是子类有一个方法,和父类(也可能是爷爷,更上一级)的某个方法的名称、返回类型、参数一样&#xff0c;那么我们就说子类的这个方法 覆盖了父类的方法 重写重载对比

语音模块学习——LSYT201B模组(实际操作篇)

目录 一、定制词条 二、直接用串口通信 三、使用单片机通信 理论篇在这&#xff0c;依旧是深圳雷龙发展的语音模块。 http://t.csdnimg.cn/2SzJL 一、定制词条 因为我想后面加到我的毕设上加个语音模块&#xff0c;所以定制的词条都是和芯测相关的。 动作词条播报串口输…

排序(6)——快速排序算法之挖坑版&前后指针版

目录 挖坑版 基本思路 代码实现 注意点 前后指针版 基本思路 代码实现 注意点 由于hoare版本的快速排序有很多坑和需要注意的地方&#xff0c;就会导致代码写起来不容易&#xff0c;这里我们给出两种不同的单趟排序思路&#xff1a;挖坑版&#xff06;前后指针版。 挖坑…

Python 读取写入excel文件

使用Python读取和写入excel的xlsx、xls文件 目录 读取xlsx文件 安装三方库 引入三方库 读取数据 打开文件 表名 最大行数 最大列数 读取一张表 读取整个文件 返回xls整体内容 安装三方包 读取内容 写入xls文件 引入三方库 创建文件并写入数据 报错及解决 报错…

房屋租赁系统|基于 Mysql+Java+JSP技术的房屋租赁系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 前台首页功能 管理员功能 租户功能 房屋租赁系统结构图 数据库设计 lunwen参考 概述 源码获取 文末获取源码 前台首页功能 管理员功能 租户功能 房屋租赁系统结构图 数据库设计 lunwen参考 概述 随着科学技术的飞速发展&#xff0c;社会的方方面面…

ODI报错

三月 08, 2024 1:20:09 下午 oracle.odi.mapping 信息: Start generation of map physical design: MapPhysicalDesign New_Mapping.物理 三月 08, 2024 1:20:09 下午 oracle.odi.mapping 信息: Finished generation of map physical design: MapPhysicalDesign New_Mapping.物…

HTML—基本介绍

HTML是一种超文本标记语言(HyperText Markup Language)&#xff0c;用于创建网页的标记语言超文本&#xff1a;是指页面内可以包含图片、链接、声音、视频等内容标记&#xff1a;HTML富含大量的标签供程序员使用&#xff0c;通过标记符号来规定指定内容的样式 浏览器最终根据不…