04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源

这篇具有很好参考价值的文章主要介绍了04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. handler方法分析

/**
 * 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关键字快速处理!


2. 页面跳转控制

https://blog.csdn.net/m0_59735420/article/details/128126514

2.1 返回模板视图页面

什么是返回模板视图页面?

当http请求被controller中的handler处理时,有时需要指定响应的页面(返回本地的)

为什么要返回模板视图页面?
项目采用了前后端分离模式 ,前后端通信通过 API 接口完成,数据格式一般使用 JSON 或 XML。

目标 : 用户访问localhost:8080/jsp/index时,返回给用户本地webapp-WEB-INF-view下的home.jsp页面.

  1. pom文件添加jsp依赖
<!-- jsp需要依赖! jstl-->
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
</dependency>
  1. 创建等会要返回的home.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Title</title>
  </head>
  <body>
        <!-- 可以获取共享域的数据,动态展示! jsp== 后台vue -->
        ${msg}
  </body>
</html>

  1. 新建一个MvcConfig类
//本类中要重写handlerMapping,handlerAdapter两个方法,配置一个json转化器, 通过一个注解@EnableWebMvc实现

@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描

//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {

   //配置一个jsp对应的视图解析器
    public void configureViewResolvers(ViewResolverRegistry registry) {
        //Resigter可以帮忙添加前后缀
        //稍后的handler中如果想给前端返回 /WEB-INF/views/index .jsp
        registry.jsp("/WEB-INF/views/",".jsp");
    }
}
  1. 编写jspController类
/**
 *  跳转到提交文件页面  
 *  
 *  如果要返回jsp页面!
 *     1.方法返回值改成字符串类型
 *     2.返回逻辑视图名即可    
 *         <property name="prefix" value="/WEB-INF/views/"/>
 *            + 逻辑视图名 +
 *         <property name="suffix" value=".jsp"/>
 */
 //访问localhost:8080/jsp/index时,返回给用户本地webapp-WEB-INF-view下的home.jsp页面.
@GetMapping("index")
public String jumpJsp(Model model){
    System.out.println("FileController.jumpJsp");
    return "home";
}

2.2 跳转和重定向

重定向与跳转的区别:

1.请求的次数的不同 : 重定向总共请求了两次服务器;转发则是用户请求一次可能经过N个JSP页面由返回到用户浏览器中,是一次请求多次处理的过程;

2.跳转过程中链接的变化不同 : ,重定向在跳转中请求了两次服务器并且是两次不同的链接地址,在浏览器的地址栏可以看到两次是有变化的;转发在跳转过程中浏览器请求了一次服务器,服务器经过了n个JSP页面并没有改变请求的链接地址,因为用户只请求了一次,所以在整个跳转过程中链接地址是没有改变的,在浏览器的地址栏就可以看到

3.目的不同 : 重定向只是简单的让用户访问一个新的链接,而转发是服务器要得到用户的请求内容并需要进行一部分处理的,所以两者目的之不同的

  • 不管是重定向(redirect)还是转发(forward),其handler都要设置String类型
  • 语法为 return 关键字: /路径,不需要额外注解
  • @ResponseBody注解和转发/重定向是互斥的。@ResponseBody注解的类会快速返回,不走视图解析器,也不会再转发/重定向。
  • 注意:如果是项目下的资源,转发和重定向都一样都是项目下路径!都不需要添加项目根路径!
@RequestMapping("/redirect-demo")
public String redirectDemo() {
    // 重定向到 /demo 路径 
    return "redirect:/demo";
}

@RequestMapping("/forward-demo")
public String forwardDemo() {
    // 转发到 /demo 路径
    return "forward:/demo";
}

3.返回JSON数据

  1. 如上章接收JSON数据一样,涉及JSON必须要添加依赖以及在config类中配置JSON转换器(@EnableWebMvc)。
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>
  1. 如上章接收JSON数据一样(@RequestBody),使用@ResponseBody注解返回JSON数据,该注解的作用在于将返回的对象序列化为 JSON 或 XML 格式的数据,并发送给客户端。
  2. 需注意的是ResponseBody不经过视图解析器,且与转发/重定向互斥。
@GetMapping("/accounts/{id}")
@ResponseBody
public Object handle() {
  // ...
  return obj;
}

测试方法:

@Controller
@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;
}

合并两条注解:
@Controller+@ResponseBody = @RestController

3.返回静态资源

什么是静态资源?
资源本身已经是可以直接拿到浏览器上使用的程度了,不需要在服务器端做任何运算、处理。典型的静态资源包括:
- 纯HTML文件/图片
- CSS文件
- JavaScript文件

如何让外部能够访问静态资源?

  • DispatcherServlet 的 url-pattern 配置的是“/”,表示整个 Web 应用范围内所有请求都由 SpringMVC 来处理
  • 而对 SpringMVC 来说,若想某个url被后台处理,必须将这个urll用 @RequestMapping 绑定到某个handler上,才能找到处理请求的方法,否则handlermapping(秘书)无法知道找哪个handler(打工人)处理这个链接。
  • 因此,思路是显然的,那就是想办法让系统知道,如果请求的是url是xxx/xxx/car.jpg , 那就从静态资源中直接提取而不是找handler(静态资源不可能存进handler里)。
  1. 准备好静态资源并编译:
    04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源,SpringMVC,spring
    04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源,SpringMVC,spring2. 在config类中开启静态资源处理:
@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.sunsplanter.controller") //
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 
public class SpringMvcConfig implements WebMvcConfigurer {
    //开启静态资源处理
    //处理的顺序是DispatcherServlet --> handlerMapping -->没找到就去找静态资源
    //平时第二步走完就结束,该方法多走一步为了找到静态资源
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

访问localhost:8080/images/car.jpg , 可以正常显示.文章来源地址https://www.toymoban.com/news/detail-802448.html

到了这里,关于04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC的数据响应-直接回写json字符串

     再加个配置和名字    配的真么一个东西:            返回成功              forword转发,另一个重定向        那个注解代表:不跳转,直接返回。后来你想返回对象或集合,你需要做两步,加一个@re.....,另一个加《MVC:。。。。》,就可以将对象转换为json格式。

    2024年02月16日
    浏览(31)
  • “深入理解SpringMVC的JSON数据返回和异常处理机制“

    在现代Web开发中,SpringMVC是一个广泛使用的框架,它提供了丰富的功能和灵活的配置选项。本文将深入探讨两个重要的主题:SpringMVC中的JSON数据返回和异常处理机制。我们将逐步介绍相关的配置和使用方法,并通过案例和综合实例来加深理解。 1.1 导入依赖 1.2 配置弹簧-MVC

    2024年02月08日
    浏览(24)
  • SpringMVC之JSON数据返回与异常处理机制---全方面讲解

         在Spring MVC中,当需要将数据 以JSON格式返回给客户端时 ,可以使用 @ResponseBody注解或@RestController注解将Controller方法的返回值直接转化为JSON格式并返回 。这使得开发者可以方便地将Java对象转换为JSON,并通过HTTP响应返回给客户端。Spring MVC框架会自动地处理这一转换过程

    2024年02月07日
    浏览(30)
  • [SpringMVC]请求与响应③(JSON数据传输参数、日期类型参数传递、内部实现原理)

    前面我们说过,现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的数据使用的是 JSON ,所以前端如果发送的是JSON数据,后端该如何接收? 对于JSON数据类型,我们常见的有三种: json普通数组([\\\"value1\\\",\\\"value2\\\",\\\"value3\\\",...]) json对象({key1:value1,key2:value2,...})

    2024年02月08日
    浏览(43)
  • SpringMVC之JSON返回及异常处理机制

    目录 一、JSON处理 1.1 导入依赖 1.2 配置Spring-mvc.xml 1.3 @ResponseBody注解使用 ​编辑 1.4 Jackson 1.4.1 定义 1.4.2 用途  1.4.3 用法  1.4.4 常用注解 1.5 作用 二、统一异常处理 2.1 为什么要全局异常处理? 2.2 异常处理思路 2.3 SpringMVC异常分类 2.4 综合案例 2.4.1 异常处理方式一 2.4.2 异常处

    2024年02月09日
    浏览(28)
  • SpringMVC获取参数与页面跳转

    第一种 直接当成方法的参数,需要与前台的name一致 相当于Request.getAttribute(\\\"username\\\") Controller 第二种 使用对象接收 页面的name也要和对象的字段一致 创建一个对应的实体类 Controller 将参数更换为User对象就行 SpringMVC获取到的前台数据,如果是数组会自动帮我们转换为字符串 日

    2024年01月21日
    浏览(28)
  • DAY04_SpringMVC—SpringMVC简介&PostMan和ApiFox工具使用&SpringMVC请求与响应&REST风格

    问题导入 SpringMVC框架有什么优点? 1.1 SpringMVC概述 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 优点 使用简单,开发便捷(相比于Servlet) 灵活性强 问题导入 在Controller中如何定义访问路径,如何响应数据? 2.0 回顾Servlet技术开发web程序流程 创建web工程(Maven结构) 设置

    2024年02月13日
    浏览(37)
  • SpringMVC的常用注解,参数传递以及页面跳转的使用

    目录 slf4j 常用注解 @RequestMapping @RequestParam @RequestBody @PathVariable 参数传递  首先在pom.xml配置文件中导入SLF4J的依赖 基础类型+String   复杂类型 @RequestParam @PathVariable @RequestBody  增删改查  返回值 void返回值  String返回值 model+String   页面跳转 --转发和重定向 SLF4J,简单日志门面

    2024年02月09日
    浏览(35)
  • Vue3 axios响应拦截器处理接口返回401未登录跳转登录页

    问题: 在 asiox 使用 useRouter 实例化创建 router 路由对象,在 response 响应拦截器里为 undefined 访问不到 使用 window.location.href = \\\'/login\\\' 跳转登录页, 本地可以正常跳转,测试环境页面会显示 not found 404, 测试环境访问地址大概是这样 ip:8080/pm/#/login , 本地没有 /pm 解决方案: 在 mai

    2024年01月21日
    浏览(39)
  • 记录坑,接口不返回json突然返回前端页面html

    前端本地在调试页面,突然告诉我一个很久没动的好端端的接口突然返回值变成了html , 查遍了生产环境和测试环境同一个页面接口返回值都没问题, 问题只出在他本地环境 ,关键他连的是测试环境(数据正常)的接口, 前端让我排查接口,服务器配置,我考虑半天可能出现的

    2024年02月03日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包