03【Controller方法返回值详解】

news2024/12/23 12:49:35

文章目录

  • 三、Controller方法返回值详解
    • 3.1 返回普通字符串
      • 3.1.1 跳转
      • 3.1.2 设置视图解析器
    • 3.2 返回ModelAndView
      • 3.2.1 普通视图
      • 3.2.2 RedirectView
    • 3.3 返回特殊字符串
    • 3.4 返回void


三、Controller方法返回值详解

3.1 返回普通字符串

3.1.1 跳转

package com.dfbz.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/demo")            // 为此Controller命名一个请求路径,以后访问此Controller下的任意方法都需要加上/demo
public class DemoController {
    
    @RequestMapping("/demo01")		// 后台请求可以不写.from
    public String demo01(){
        return "hello";
    }
}

访问:http://localhost:8080/demo/demo01.form

在这里插入图片描述

客户端请求的URL未发生改变,请求却转到了/demo/hello,说明服务器内部发生跳转;

也就是说,在返回字符串的情况下,SpringMVC默认当做视图进行跳转;

3.1.2 设置视图解析器

通常来说,我们的视图(页面)都是放在某个文件夹进行管理的,并且后缀通常都是固定的,要么是.html或者是.jsp再或者是其他的;因此我们希望可以固定好前缀(存放页面的文件夹名称)和后缀(文件名的后缀)

在这里插入图片描述

使得我们的代码改为:

/**
 * 指定进行视图跳转
 *
 * @return
 */
@RequestMapping("/demo02")
public String demo02() {
    return "index02";          // 自动跳转到 /WEB-INF/views/index02.jsp
}

很显然,我们现在肯定是做不到的;

我们在前面查看SpringMVC源码时,发现SpringMVC默认使用的是InternalResourceViewResolver来进行视图页面的解析;这个类中提供了视图的前缀和后缀的配置;

在这里插入图片描述

在dispatcher-servlet.xml中配置InternalResourceViewResolver

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.dfbz"/>

   <!--配置视图解析器-->
    <mvc:view-resolvers>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--配置页面统一前缀-->
            <property name="prefix" value="/WEB-INF/views/"/>

            <!--配置页面统一后缀-->
            <property name="suffix" value=".jsp"></property>
        </bean>
    </mvc:view-resolvers>
    
    <!--开启springmvc注解支持-->
    <mvc:annotation-driven/>
</beans>

访问:http://localhost:8080/demo/demo02.form

在这里插入图片描述

3.2 返回ModelAndView

ModelAndView:翻译过来就是模型和视图的意思,该对象保存了我们我们填充的数据(在request域中)和要跳转的视图地址;

3.2.1 普通视图

通过ModelAndView设置的视图,SpringMVC默认将其跳转到这个视图,并且该视图会经过视图解析的前后缀处理;

/**
 * 指定进行视图跳转
 *
 * @return
 */
@RequestMapping("/demo03")
public ModelAndView demo03() {
    ModelAndView mv=new ModelAndView();
    
    // 跳转到/WEB-INF/views/index03.jsp
    mv.setViewName("index03");              
    mv.addObject("msg","index03~~");

    return mv;
}

创建:/WEB-INF/views/index03.jsp

在这里插入图片描述

3.2.2 RedirectView

RedirectView是一种特殊的视图,SpringMVC会将其重定向到这个视图,并且RedirectView允许携带重定向参数;

/**
 * 使用RedirectView视图进行重定向
 *
 * @return
 */
@RequestMapping("/hello")
public ModelAndView hello() {

    RedirectView redirectView = new RedirectView();

    // RedirectView不会参与视图解析器的前后缀处理
    redirectView.setUrl("/hello.jsp");
    redirectView.addStaticAttribute("name","xiaohui");
    redirectView.addStaticAttribute("age",20);

    return new ModelAndView(redirectView);
}
  • 准备JSP页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>name: ${param.name}</h1>
    <h1>age: ${param.age}</h1>
</body>
</html>

Tips:params是jsp的内置参数,用于获取请求该JSP所携带的参数;

访问:http://localhost:8080/demo/hello.form

在这里插入图片描述

3.3 返回特殊字符串

我们前面的测试中,在返回普通字符串时SpringMVC默认是将其作为视图进行跳转,并且可以收视图解析器的前缀/后缀所控制,那么如果我们配置了前缀/后缀同时某个跳转不需要加上前缀后缀呢?

在SpringMVC提供了两个特殊字符串前缀:

  • forwrad:进行页面的跳转,该跳转不经过前缀和后缀处理
  • redirect:进行页面的重定向,该重定向不经过前缀和后缀处理
/**
 * 返回特殊字符串:forward-->转发(不会经过视图解析器)
 * @return
 */
@RequestMapping("/demo04")
public String demo04() {

    return "forward:/index04.jsp";          // 转发到http://localhost:8080/index04.jsp
}

/**
 * 返回特殊字符串:redirect(不会经过视图解析器)
 * @return
 */
@RequestMapping("/demo05")
public String demo05() {

    return  "redirect:/index05.jsp";         // 重定向到http://localhost:8080/index05.jsp
}

访问:http://localhost:8080/demo/demo04.form

在这里插入图片描述

访问:http://localhost:8080/demo/demo05.form

在这里插入图片描述

3.4 返回void

我们知道,SpringMVC把方法的返回值当做视图进行跳转,如果返回void代表的就是不需要提供视图,一般用于ajax请求,只需要响应数据,不需要返回视图

/**
 * 返回void(用于ajax请求,不需要提供页面,只需要响应数据即可)
 *
 * @param response
 * @throws IOException
 */
@RequestMapping("/demo06")
public void demo06(HttpServletResponse response) throws IOException {        // 接收request和response
    // 写出数据给前端
    response.getWriter().write("hello springmvc!");
}

Tips:只要是Controller中的方法,都可以自动绑定request、response、session这些servlet的原生api;

访问:http://localhost:8080/demo/demo06.form

在这里插入图片描述

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

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

相关文章

美颜预览卡顿问题跟踪

预览卡顿的问题&#xff0c;首先第一想法就是看下帧率&#xff0c;帧率小&#xff0c;自然会卡顿。根据人眼视觉暂留原理&#xff0c;帧率小于24帧&#xff0c;人脸就会感知到卡顿。 帧率的概念在Camera中我们经常会提到&#xff0c;其实有3个帧率概念&#xff0c;从下往常看&a…

1-5-10 快恢在数字化安全生产平台 DPS 中的设计与落地

作者&#xff1a;银桑 背景 11 月 5 日&#xff0c;在 2022 杭州 云栖大会上&#xff0c;数字化安全生产平台 DPS 重磅发布&#xff0c;助力传统运维向 SRE 转型&#xff0c;在数字化安全生产平台 DPS 重磅发布中提到了 DPS 诞生的背景&#xff0c;希望解决的企业问题以及核…

ICC2: secondary pg pin的作用与连接

1.secondary pg pin的作用 1&#xff09; 作为备用电源&#xff08;backup power&#xff09;&#xff0c;当主供电&#xff08;primary power&#xff09;断电后&#xff0c;让standard cell仍能保持正常运行或者至少保持输出不变&#xff0c;比如always on buf和retention r…

【矩阵论】4. 矩阵运算——广义逆——加号逆应用

4.4.3 矩阵方程求解 前置&#xff1a;正规方程 a. 有解情况 若矩阵方程 AXBDAXBDAXBD 有解相容&#xff0c;则有特解 X0ADBX_0A^DB^X0​ADB 无解定理&#xff1a;若 X0ADBX_0A^DB^X0​ADB &#xff0c;使 AX0B≠DAX_0B\neq DAX0​B​D &#xff0c;则矩阵方程无解 齐次方程…

【学习笔记】深度学习入门:基于Python的理论与实现-神经网络

CONTENTS三、神经网络3.1 从感知机到神经网络3.2 Activation function3.3 多维数组的运算3.4 三层神经网络的实现3.5 输出层的设计3.6 手写数字识别三、神经网络 3.1 从感知机到神经网络 用图来表示神经网络的话&#xff0c;如下图所示&#xff0c;我们把最左边的一列称为输入…

Open WebRTC Toolkit Native SDK Windows环境编译

1、首先按照编译webrtc原生代码环境&#xff0c;配置系统环境 https://chromium.googlesource.com/chromium/src//main/docs/windows_build_instructions.mdhttps://chromium.googlesource.com/chromium/src//main/docs/windows_build_instructions.md 安装openssl软件/s…

MODBUS协议下,能否实现MCGS触摸屏与FX5U之间无线通讯?

在工厂里&#xff0c;触摸屏往往位于程控室内&#xff0c;作为控制多个不同位置PLC的主站设备。因为触摸屏和plc所处位置距离较为分散&#xff0c;重新铺设电缆线工期长&#xff0c;成本高&#xff0c;故采用无线方式解决触摸屏与PLC之间的通讯问题。 一、方案概述 本方案是M…

年底了,准备跳槽的可以看看

前两天跟朋友感慨&#xff0c;今年的铜九铁十、裁员、疫情导致好多人都没拿到offer!现在已经12月了&#xff0c;具体明年的金三银四只剩下两个月。 对于想跳槽的职场人来说&#xff0c;绝对要从现在开始做准备了。这时候&#xff0c;很多高薪技术岗、管理岗的缺口和市场需求也…

【Linux03-基本工具之VIM】Linux下的强大编辑器(附软件生态与yum)

前言 本期分享6个Linux中常用的基本工具&#xff0c;以确保后续的学习能够进行。 零、软件生态与yum 抛出一个问题&#xff1a;软件的下载&#xff1f; 具体拆分 软件从哪里下&#xff1f;软件由谁提供&#xff1f;怎么下载&#xff1f; 软件&#xff0c;肯定不在本地&am…

RabbitMQ死信队列、延时队列

介绍&#xff1a; 消息被消费⽅否定确认&#xff0c;使⽤ channel.basicNack 或 channel.basicReject &#xff0c;并且此时 requeue 属性被设置为 false 。消息在队列的存活时间超过设置的TTL时间。消息队列的消息数量已经超过最⼤队列⻓度。那么该消息将成为“死信”。“死信…

Espresso Sequencer:去中心化Rollups

1. 引言 前序博客有&#xff1a; HyperPlonk——实现zkEVM的一种zk-proof system Espresso Systems团队致力于为Web3世界开发工具和基础设施。 Espresso Sequencer&#xff1a;为在不牺牲扩展性和速度的情况下&#xff0c;实现的去中心化rollups系统&#xff0c;兼具Web2的性…

[附源码]计算机毕业设计springboot软考刷题小程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MAC层协议总结

一、现存问题 广播网络存在问题 当信道的使用存在竞争时&#xff0c;如何分配信道的使用权----->如一个人停止讲话&#xff0c;另外可能两个或多个人同时讲话&#xff0c;当只有单个信道时&#xff0c;怎么决定下一个讲话的人&#xff1f;------>为了解决这个问题&#…

JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 前言 在之前的文章中,由于忘记介绍使用的rtp推流方式都是TS流方式,RTP方式推流没讲,本章作为之前文章(JavaCV音视频开发宝典:rtsp拉流并使用转码方式转推到rtp)的补充。 注意:本文不需要…

Spring MVC Formatter(数据格式化)详解

Spring MVC 框架的 Formatter 与 Converter 一样&#xff0c;也是一个可以将一种数据类型转换成另一种数据类型的接口。不同的是&#xff0c;Formatter 的源数据类型必须是 String 类型&#xff0c;而 Converter 的源数据类型是任意数据类型。 在 Web 应用中由 HTTP 发送的请求…

keychron矮轴无线机械键盘简直就是yyds

一、背景 日常生活中&#xff0c;我们都离不开键盘&#xff0c;游戏党打游戏要键盘&#xff0c; 工作人员无论使用台式电脑还是笔记本操作都离不开键盘&#xff0c;尤其程序员这一族&#xff0c;键盘简直就是敲代码的灵魂。随着经济和科技飞速发展&#xff0c;我们早已不在像从…

[附源码]Python计算机毕业设计Django电子相册管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

公共建筑节能大数据应用进展

3月26日&#xff5c;清华大学建筑节能学术周——公共建筑节能—工程实践助力实现双碳目标 【3月26日公开论坛】公共建筑节能 – 工程实践助力实现双碳目标 公共建筑节能大数据应用进展 建筑用能负荷受到气象条件、建筑围护结构、设备系统、人行为等多重因素耦合影响&#xff…

C语言 结构体

C语言 结构体一、结构体的声明和初始化1. 结构体声明2. 结构体初始化二、typedef 重定义结构体三、结构体成员的类型四、结构体成员的访问五、结构体传参六、结构体的自引用七、结构体的内存对齐对齐规则程序清单1程序清单2程序清单3程序清单4修改默认对齐数一、结构体的声明和…

nvcc编译器之设备和主机独立编译(chapter 6)

目录 6. CUDA中的独立编译 6.1 单独编译时的代码改动 6.2 nvcc独立编译选项 6.3 库 6.4 示例 6.5 分布编译优化 6.6 独立编译的潜在问题 6. CUDA中的独立编译 在5.0版本之前&#xff0c;CUDA不支持分开编译&#xff0c;因此CUDA代码不能访问跨文件&#xff08;编译单元&…