SpringMVC学习记录(三)之响应数据

SpringMVC学习记录(三)之响应数据

  • 一、页面跳转控制
    • 1、快速返回模板视图
    • 2、转发和重定向
  • 二、返回JSON数据
    • 1、前置准备
    • 2、@ResponseBody
  • 三、返回静态资源
    • 1、静态资源概念
    • 2、访问静态资源

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

请求数据接收,是通过handler的形参列表接收的。前端数据响应,是通过handler的return关键字快速处理!

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

一、页面跳转控制

1、快速返回模板视图

  1. 准备jsp页面和依赖
<!-- jsp需要依赖! jstl-->
<dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>3.0.0</version>
</dependency>
  1. jsp页面创建
    建议位置:/WEB-INF/下,避免外部直接访问!
    位置:/WEB-INF/views/home.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>Title</title></head><body><!-- 可以获取共享域的数据,动态展示! jsp== 后台vue -->${msg}</body>
</html>
  1. 配置jsp视图解析器
@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {//配置jsp对应的视图解析器@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {//快速配置jsp模板语言对应的registry.jsp("/WEB-INF/views/",".jsp");}
}
  1. handler返回视图

跳转到提交文件页面 /save/jump

/***  跳转到提交文件页面  /save/jump*  *  如果要返回jsp页面!*     1.方法返回值改成字符串类型*     2.返回逻辑视图名即可    *         <property name="prefix" value="/WEB-INF/views/"/>*            + 逻辑视图名 +*         <property name="suffix" value=".jsp"/>*/
@GetMapping("jump")
public String jumpJsp(Model model){System.out.println("FileController.jumpJsp");model.addAttribute("msg","request data!!");  //将数据保存到数据共享作用域中return "home";
}

2、转发和重定向

在 Spring MVC 中,Handler 方法返回值来实现快速转发,可以使用 redirect 或者 forward 关键字来实现重定向。

@RequestMapping("/redirect-demo")
public String redirectDemo() {// 重定向到 /demo 路径 return "redirect:/demo";
}@RequestMapping("/forward-demo")
public String forwardDemo() {// 转发到 /demo 路径return "forward:/demo";
}//注意: 转发和重定向到项目下资源路径都是相同,都不需要添加项目根路径!填写项目下路径即可!

总结:

  • 将方法的返回值,设置String类型
  • 转发使用forward关键字,重定向使用redirect关键字
  • 关键字: /路径
  • 注意:如果是项目下的资源,转发和重定向都一样都是项目下路径!都不需要添加项目根路径!

二、返回JSON数据

1、前置准备

导入jackson依赖

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

添加json数据转化器 @EnableWebMvc

//TODO: SpringMVC对应组件的配置类 [声明SpringMVC需要的组件信息]//TODO: 导入handlerMapping和handlerAdapter的三种方式//1.自动导入handlerMapping和handlerAdapter [推荐]//2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载//3.使用@Bean方式配置handlerMapper和handlerAdapter
@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {}

2、@ResponseBody

可以在方法上使用 @ResponseBody注解,用于将方法返回的对象序列化为 JSON 或 XML 格式的数据,并发送给客户端。在前后端分离的项目中使用!
(注意区分@ResponseBody@RequestBody

@GetMapping("/accounts/{id}")
@ResponseBody
public Object handle() {// ...return obj;
}

具体来说,@ResponseBody 注解可以用来标识方法或者方法返回值,表示方法的返回值是要直接返回给客户端的数据,而不是由视图解析器来解析并渲染生成响应体(viewResolver没用)。

@RequestMapping(value = "/user/detail", method = RequestMethod.POST)
@ResponseBody
public User getUser(@RequestBody User userParam) {System.out.println("userParam = " + userParam);User user = new User();user.setAge(18);user.setName("John");//返回的对象,会使用jackson的序列化工具,转成json返回给前端!return user;
}

如果类中每个方法上都标记了 @ResponseBody 注解,那么这些注解就可以提取到类上。

@ResponseBody  //responseBody可以添加到类上,代表默认类中的所有方法都生效!
@Controller
@RequestMapping("param")
public class ParamController {
}

类上的 @ResponseBody 注解可以和 @Controller 注解合并为 @RestController 注解。

//@ResponseBody  
//@Controller
@RestController //  @ResponseBody @Controller 合二为一
@RequestMapping("param")
public class ParamController {
}

三、返回静态资源

1、静态资源概念

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

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

web应用加入静态资源
在这里插入图片描述

2、访问静态资源

在这里插入图片描述

  • 问题分析

    • DispatcherServlet 的 url-pattern 配置的是“/”
    • url-pattern 配置“/”表示整个 Web 应用范围内所有请求都由 SpringMVC 来处理
    • 对 SpringMVC 来说,必须有对应的 @RequestMapping 才能找到处理请求的方法
    • 现在 images/mi.jpg 请求没有对应的 @RequestMapping 所以返回 404
  • 问题解决

    • 在 SpringMVC 配置配置类:
@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {//配置jsp对应的视图解析器@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {//快速配置jsp模板语言对应的registry.jsp("/WEB-INF/views/",".jsp");}//开启静态资源处理 <mvc:default-servlet-handler/>@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
}

现在,我们的静态图片就可以正常访问了。

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

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

相关文章

利用EasyPOI导出Excel,内容中含有图片

需求背景 做一个OCR识别的功能,需要导出原图和识别出来的结果的图纸,将数据导出. 解决方案 EasyPOI中可以用字节类型,导出图片,可以将图片存放的url 转成字节,然后导出.但是整个导出过程耗时较久。 具体代码 /*** 草图OCR识别记录-导出.** @param response: Http…

ubuntu 22.04 server python3 包 LTS

ubuntu 22.04 server python3 包 LTS sudo apt install -y python3-pip 不同的用户的&#xff0c;包的 安装位置不一样 系统默认目录 /usr/lib/python3/dist-packages 然后每个用户 各自的目录是 /home/mike/.local/lib/python3.10/site-packages sudo apt install -y pytho…

CSDN做样板,教我们如何为新网站引流

CSDN为我们做了个很好的例子&#xff0c;详细请看下图 亮点分析&#xff1a; 1. 未采用硬广在网站上进行引流。减少了给用户在直觉上的造成的反感&#xff1b; 2. 在GitHub的转跳页面中&#xff0c;植入额外的关联网站链接。虽然对用户解决问题没啥鸟用&#xff0c;但是人家能…

【JAVA】Java基础—面向对象编程:构造方法-构造方法的概念与案例

在Java编程中&#xff0c;构造方法是类的重要组成部分&#xff0c;用于初始化对象的状态&#xff0c;即在创建对象时设置对象的属性。构造方法初始在创建对象时提供必要的参数&#xff0c;从而使对象处于一个有效的状态。 重要性 对象初始化&#xff1a;构造方法允许我们在创建…

【鉴权】 Web 会话管理:Cookie、Session 和 Token 深度解析

目录 引言一、Web 会话管理的基本概念1.1 Cookie、Session 和 Token1.2 为什么需要会话管理&#xff1f; 二、会话管理技术的比较2.1 Cookie 会话管理2.1.1 什么是 Cookie&#xff1f;2.1.2 Cookie 工作原理2.1.3 安全性问题2.1.4 最佳实践 2.2 Session 会话管理2.2.1 什么是 S…

什么是头皮EA(剥头皮EA)?

在许多外汇交易者的眼中&#xff0c;剥头皮交易一直是一个神秘的存在。一部分人认为它是一种“外汇禁招”&#xff0c;而另一部分人则认为它比日内交易更容易盈利。那么&#xff0c;外汇剥头皮到底是什么&#xff1f;它与点差之间又有怎样的关系&#xff1f;本文将对剥头皮交易…

1小时搞定魔乐平台AI应用的构建和离线复现

想象一下&#xff0c;只需一小时&#xff0c;你就能在魔乐平台上构建自己的AI应用&#xff0c;并在本地环境中完美复现。听起来是不是很诱人&#xff1f;今天&#xff0c;我们就来手把手教你如何快速上手魔乐社区的space服务&#xff0c;让你的AI创意变为现实。 一 前言&#x…

微服务架构面试内容整理-分布式配置管理-Nacos Config

Nacos Config 是 Nacos 提供的一个配置管理功能,专门用于动态管理应用的配置。在微服务架构中,Nacos Config 允许开发者集中管理和动态更新各个服务的配置,从而提升系统的灵活性和可维护性。以下是 Nacos Config 的主要特点、工作原理和使用场景: 主要特点 1. 动态配置管理…

yum安装zabbix5.0升级php到74的办法

【背景】 公司时不时有扫描漏洞,之前发现了php漏洞,因开启防火墙,限定IP+端口,暂时躲过升级;现在,老话重提,开启了KPI考核,躲是躲不过去的了,升级吧 【难题】 服务器为centos7,因操作系统问题,只能安装zabbix5.0。当时图省力,官网的办法,都是yum安装,很是简便。…

量化交易系统开发-实时行情自动化交易-3.3.数据采集流程

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来说说数据采集流程&#xff0c;后…

华为ensp防火墙配置(纯享版)

文章目录 前言一、拓扑结构二、配置步骤1.路由器配置&#xff08;路由器代替互联网&#xff09;2.server和pc配置3.防护墙配置4.测试 总结 前言 防火墙是生活和项目中不可或缺的一部分&#xff0c;本篇文章对华为的ensp防火墙配置做一个总结。在之前的dhcp配置中有软件的下载地…

区块链技术在数字版权管理中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 引言 区块链技术概述 …

go get 和go install 的区别

go get 和 go install 的主要区别&#xff1a; go get 的行为&#xff1a; 在 Go 1.17 之后&#xff0c;go get 主要用于修改 go.mod&#xff0c;添加、删除或者更新依赖安装的依赖包会记录在项目的 go.mod 文件中下载的包会存储在本地缓存目录: $GOPATH/pkg/mod/ 下示例&…

docker 拉取MySQL8.0镜像以及安装

目录 一、docker安装MySQL镜像 搜索images 拉取MySQL镜像 二、数据挂载 在/root/mysql/conf中创建 *.cnf 文件 创建容器,将数据,日志,配置文件映射到本机 检查MySQL是否启动成功&#xff1a; 三、DBeaver数据库连接 问题一、Public Key Retrieval is not allowed 问题…

云防护单节点2T抗攻击能力意味着什么?

随着互联网的发展&#xff0c;DDoS攻击的规模和频率不断增加&#xff0c;对企业和个人用户的网络服务造成了严重威胁。云防护服务作为一种高效的DDoS防护手段&#xff0c;逐渐成为许多企业的首选。本文将重点讨论云防护单节点2T&#xff08;太比特每秒&#xff09;抗攻击能力的…

VUE3中Element table表头动态展示合计信息(不是表尾合计)

一、背景 原型上需要对两个字段动态合计,输出摘要信息 原先想到是的Element的 :summary-method,发现不是动态,所以换监听来实现 二、vue代码 <el-table v-model="loading" :data="itemList"><el-table-column label="药品名称" pro…

9. 基于 Redis 实现排行榜功能

在现代应用场景中&#xff0c;排行榜&#xff08;leaderboard&#xff09;广泛应用于游戏、社交网络、电子商务等领域&#xff0c;通过排行榜来展示用户排名、评分或成就等数据。而Redis作为一个高性能的内存数据库&#xff0c;特别擅长处理需要快速查询和更新的数据&#xff0…

让直播流量不再是“数字游戏”!本地生活+AI数字人的共赢方式 !

如今&#xff0c;数字化浪潮席卷全球&#xff0c;直播行业竞争愈发激烈。许多人都希望能够将自己直播间所产生的热度实时变现&#xff0c;但总是没有头绪或者是把握不住机会&#xff0c;就这样让直播流量从白白流失。即便是有人使用上创新型智能AI数字人系统&#xff0c;也少有…

jmeter常用配置元件介绍总结之前置处理器、测试片段

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之前置处理器、测试片段 6.前置处理器6.1用户参数6.2取样器超时6.3.测试片段6.4JSR223 PreProcessor6.5.JDBC PreProcessor 6.前置处理器 在取样器请求之前执行的操作&#xff0c;优先级比取样器高&#xff0c;用来处理一些…

Netty实现WebSocket Client三种典型方式

一、简单版本 package com.ptc.ai.box.biz.relay.client;import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext;…