SpringMVC多种类型数据响应

SpringMVC多种类型数据响应入门

1.概念

  1. RequestMapping

    • 作用用于建立请求URL和处理请求方法之间的对应关系

    • 位置

      • 类上,请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录

      • 方法上,请求URL的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径

    • 属性:

      • value:用于指定请求的URL。它和path属性的作用是一样的

      • method:用于指定请求的方式

      • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样

        • 例如:

          • params = {"accountName"},表示请求参数必须有accountName

  2. 视图解析器

    SpringMVC有默认组件配置,默认组件都是Dispatcherservlet.properties配置文件中配置的,该配置文件地址

1.xml方式

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property>
</bean>

2.注解方式

@Bean

//在spring配置类中加入视图解析器的配置@Beanpublic InternalResourceViewResolver internalResourceViewResolver(){InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/views/");viewResolver.setSuffix(".jsp");return viewResolver;}

编写控制器和处理请求的方法

@Controller
public class HelloController {@RequestMapping("/hello")public String hello(){System.out.println("hello···");return "hello";}
}

2转发和重定向

    @RequestMapping("/forward")public String forword(){System.out.println("forward···");return "forward:/WEB-INF/views/index.jsp";}@RequestMapping("/redirect")public String redirect(){System.out.println("redirect···");//return "redirect:/login.jsp";return "redirect:/hello";}

(3)返回ModelAndView对象

  • 修改hello.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>你好,SpringMVC!${username}
</body>
</html>

编写控制器中处理请求的方法

通过HttpServletRequest传递数据

使用Model或者Map或者ModelMap

传递数据 使用ModelAndView传递数据

@RequestMapping("/hello2")public ModelAndView hello2(){//Model:模型,用于封装数据//View:视图,用于展示数据ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("username","pep7chiao");modelAndView.setViewName("hello");return modelAndView;}@RequestMapping("/hello3")public ModelAndView hello3(ModelAndView modelAndView){modelAndView.addObject("username","pep7chiao");modelAndView.setViewName("hello");return modelAndView;}@RequestMapping("/hello4")public String hello4(Model model){model.addAttribute("username","messi");return "hello";}@RequestMapping("/hello5")public String hello5(HttpServletRequest reqest){ //HttpServletRequest需要添加依赖reqest.setAttribute("username","ronaldo");return "hello";}

挨个测试

......

回写数据

回写数据

(1)直接返回字符串

  • 通过SpringMVC框架注入的response对象,使用response.getWriter().print(“hello world”)回写数据,此时不需要视图跳转,业务方法返回值为void。

    @RequestMapping("/data1")
    public void data1(HttpServletResponse response) throws IOException {response.setContentType("text/html;charset=utf-8");response.getWriter().print("1111");}

  • 将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是跳

    转,而是直接在http响应体中返回。

    @RequestMapping(value = "/data2",produces = "text/html;charset=utf-8")
    @ResponseBody
    public String data2(){return "22222";
    }

(2)返回对象或集合

  • 导入json相关依赖

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

  • 通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用jackson进行对象或集合的转换,因此需要在spring-mvc.xml中进行如下配置:

  • <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
               <property name="messageConverters">
                   <list>
                       <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                       </bean>
                   </list>
               </property>
       </bean>

  • 开启mvc的注解驱动

  • <mvc:annotation-driven>会自动加载RequestMappingHandlerMapping (处理映射器)和 RequestMappingHandlerAdapter(处理适配器),可用在spring-mvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。
  • 同时使用<mvc:annotation-driven>默认底层就会集成jackson进行对象或集合的json格式字符串的转换。
    • xml方式:spring核心配置文件中加以下配置

      <mvc:annotation-driven/>(注解驱动代替上述为处理器适配器配置消息转换参数的配置。)
    • 注解方式:spring配置类上加以下注解

      @EnableWebMvc
  • 在com.cqgcxy.entity包下创建实体类
  • package com.cqgcxy.entity;public class Phone {
    //    phone_id	bigintprivate Long phoneId;
    //    brand_id	bigintprivate Long brandId;
    //    model_number	varcharprivate String modelNumber;
    //    capacity	intprivate Integer capacity;public Long getPhoneId() {return phoneId;}public void setPhoneId(Long phoneId) {this.phoneId = phoneId;}public Long getBrandId() {return brandId;}public void setBrandId(Long brandId) {this.brandId = brandId;}public String getModelNumber() {return modelNumber;}public void setModelNumber(String modelNumber) {this.modelNumber = modelNumber;}public Integer getCapacity() {return capacity;}public void setCapacity(Integer capacity) {this.capacity = capacity;}@Overridepublic String toString() {return "Phone{" +"phoneId=" + phoneId +", brandId=" + brandId +", modelNumber='" + modelNumber + '\'' +", capacity=" + capacity +'}';}
    }

    编写控制器中处理请求的方法

  • 	@RequestMapping("/data3")@ResponseBodypublic Phone data3() {Phone phone = new Phone();phone.setPhoneId(1L);phone.setBrandId(1L);phone.setModelNumber("mate60");phone.setCapacity(256);return phone;}

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

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

相关文章

交叉熵损失函数(Cross-Entropy Loss Function)

交叉熵损失函数&#xff08;Cross-Entropy Loss Function&#xff09; 在处理机器学习或深度学习问题时&#xff0c;损失/成本函数用于在训练期间优化模型。目标几乎总是最小化损失函数。损失越低&#xff0c;模型越好。交叉熵损失是最重要的成本函数。它用于优化分类模型。对…

10.0 输入输出 I/O

IO操作主要是指使用Java程序完成输入&#xff08;Input&#xff09;、输出&#xff08;Output&#xff09;操作。所谓输入是指将文件内容以数据流的形式读取到内存中&#xff0c;输出是指通过Java程序将内存中的数据写入到文件中&#xff0c;输入、输出操作在实际开发中应用较为…

TiDB专题---2、TiDB整体架构和应用场景

上个章节我们讲解了TiDB的发展和特性&#xff0c;这节我们讲下TiDB具体的架构和应用场景。首先我们回顾下TiDB的优势。 TiDB的优势 与传统的单机数据库相比&#xff0c;TiDB 具有以下优势&#xff1a; 纯分布式架构&#xff0c;拥有良好的扩展性&#xff0c;支持弹性的扩缩容…

一、Linux系统概述和安装

目录 1、Linux系统概述 2、Linux发行版介绍 3、虚拟机软件介绍 4、VMware安装 5、Linux系统&#xff08;CentOS&#xff09;系统安装 6、登录并查看IP地址 7、Linux连接工具CRT使用 7.1 概述 7.2 CRT安装 7.3 使用步骤 7.4 文件上传 8、Linux的快照 8.1 作用 8.2…

Go 从编译到执行

一、Go运行编译简介 Go语言&#xff08;也称为Golang&#xff09;自从2009年由Google发布以来&#xff0c;已成为现代软件开发中不可或缺的一部分。设计者Rob Pike, Ken Thompson和Robert Griesemer致力于解决多核处理器、网络系统和大型代码库所引发的现实世界编程问题。我们…

kubeadm快速搭建k8s高可用集群

1.安装及优化 1.1基本环境配置 1.环境介绍 &#xff08;1&#xff09;.高可用集群规划 主机名ip地址说明k8s-master01192.168.2.96master节点k8s-master02192.168.2.97master节点k8s-master03192.168.2.98master节点k8s-node01192.168.2.99node节点k8s-node02192.168.2.100n…

【10张图带你搞清楚生成树协议】

STP协议分类 BPDU&#xff0c;网桥协议数据单元 STP路径开销&#xff0c;以链路带宽为准&#xff0c;两个标准&#xff0c;现在主要以NEW为准 在网络刚开始运行的阶段&#xff0c;所有交换机都会从所有端口发送BPDU&#xff0c;大家都认为自己是root&#xff0c;随着B…

基于YOLOv8深度学习的火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

增强静态数据的安全性

静态数据是数字数据的三种状态之一&#xff0c;它是指任何静止并包含在永久存储设备&#xff08;如硬盘驱动器和磁带&#xff09;或信息库&#xff08;如异地备份、数据库、档案等&#xff09;中的数字信息。 静态数据是指被动存储在数据库、文件服务器、端点、可移动存储设备…

多线程05

前言 前面我们说到了死锁以及线程可见性的问题 我们将线程可见性主要归结于是JVM自身的一个bug 一个线程写一个线程读 会将一直不变的变量优化到直接从寄存器中读取,而不是缓存等读取,因为这样我们就设置了使用volatile关键字使得用到这个变量的时候必须从内存中读取数据 死锁主…

项目终验的exce表格缩放,排版等经常使用

xxx个项目的验收资料 1.申请表等等很多信息 需求&#xff1a;放在一页内等办法 上述文档&#xff0c;在excel表格打印预览中都是在两页中&#xff0c;很难调节&#xff0c;这个时候采用wps专业版本即可。 wps排版经常使用的功能如下&#xff1a; 经常使用的是 1.把所有列打印…

const 和 constexpr 深入学习

在 C 中&#xff0c;const 和 constexpr 都可以用来修饰对象和函数。修饰对象时&#xff0c;const 表示它是常量&#xff0c;而 constexpr 表示它是一个常量表达式。常量表达式必须在编译时期被计算1。修饰函数时&#xff0c;const 只能用于非静态成员的函数&#xff0c;而 con…

WPF窗口样式的比较

WPF窗口样式的比较 1.WPF默认Window窗口 带有图标 标题栏 最小最大化推出按钮 <Window x:Class"GlowWindowDemo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006…

nginx: [alert] could not open error log file

先把cmd的报错信息粘出来 nginx: [alert] could not open error log file: CreateFile() “logs/error.log” failed (3: The system cannot find the path specified) 2023/11/29 11:27:37 [emerg] 5040#18772: CreateDirectory() “D:\enviroment\nginx-1.24.0\conf/temp/cli…

Linux学习笔记09、Shell命令之历史命令和自动补全

上一篇&#xff1a;Linux学习笔记08、Shell命令之常用命令缩写及全称 目录 1、历史命令&#xff1a; 1.1、查看所有历史命令列表&#xff1a; 1.2、查看指定历史命令&#xff1a; 1.3、清除历史命令&#xff1a; 2、自动补全 2.1、当字符串唯一时&#xff1a; 2.2、当有多个…

力扣题:字符的统计-11.25

力扣题-11.25 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;387. 字符串中的第一个唯一字符 解题思想&#xff1a;直接遍历即可 class Solution(object):def firstUniqChar(self, s):""":type s: str:rtype: int""&qu…

机器学习——决策树

1.决策树 2.熵&#xff08;不确定程度&#xff09; 3.信息增益 & 信息增益比 3.1 信息增益 & 信息增益比 的 概念 3.2 案例解释说明 &#xff13;.&#xff12;.&#xff11;数据集说明 &#xff13;.&#xff12;.&#xff12;计算 &#xff14;&#xff0e;&#x…

智能井盖传感器怎么监测井盖出现倾斜?

智能井盖传感器是一种先进的智能设备&#xff0c;能够二十四小时连续监测井盖是否出现倾斜。其工作原理主要是依靠内置的传感器&#xff0c;以及搭载的MEMS“芯”技术。便于智能井盖传感器实时感知到井盖的姿态变化&#xff0c;一旦发现有倾斜的现象&#xff0c;就会立即向运维…

Jmeter之压力测试总结!

一、基本概念 1.线程组N&#xff1a;代表一定数量的并发用户&#xff0c;所谓并发就是指同一时刻访问发送请求的用户。线程组就是模拟并发用户访问。 2.Ramp-Up Period(in seconds)&#xff1a;建立所有线程的周期&#xff0c;就是告诉jmeter要在多久没启动所有线程&#xff…

python+pytest接口自动化(5)-requests发送post请求

简介 在HTTP协议中&#xff0c;与get请求把请求参数直接放在url中不同&#xff0c;post请求的请求数据需通过消息主体(request body)中传递。 且协议中并没有规定post请求的请求数据必须使用什么样的编码方式&#xff0c;所以其请求数据可以有不同的编码方式&#xff0c;服务…