SpringMVC 响应数据

文章源码

返回值分类

返回值是字符串

Controller 方法返回字符串可以指定逻辑视图的名称,通过视图解析器解析为物理视图的地址。

@Controller
@RequestMapping(path = {"/return"})
public class ReturnController { @RequestMapping(path = {"/testReturnString"})
public String testReturnString(Model model) {
System.out.println("testReturnString"); // 模拟从数据库中查询的数据
User user = new User();
user.setUsername("张三");
user.setPassword("123");
model.addAttribute("user", user);
return "update";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>修改用户</title>
</head>
<body>
修改用户成功 ${ user.username }
${ user.password } </body>
</html>

返回值是 void

如果控制器的方法返回值编写成 void,执行程序报 404 的异常,默认查找 JSP 页面没有找到。

可以使用请求转发或者重定向跳转到指定的页面。

@Controller
@RequestMapping(path = {"/return"})
public class ReturnController { @RequestMapping(path = {"/testReturnVoid"})
public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
System.out.println("testReturnVoid"); // 使用 request 请求转发
request.getRequestDispatcher("/WEB-INF/views/update.jsp").forward(request, response); // 使用 response 重定向
response.sendRedirect("testReturnString"); // 使用 response 指定响应结果
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("name: value");
}
}

返回值是 ModelAndView

ModelAndView 是 SpringMVC 为提供的一个对象,该对象可以用作控制器方法的返回值。

@Controller
@RequestMapping(path = {"/return"})
public class ReturnController { @RequestMapping(path = {"testReturnModelAndView"})
public ModelAndView testReturnModelAndView() {
System.out.println("testReturnModelAndView"); ModelAndView mv = new ModelAndView();
mv.setViewName("success"); // // 跳转到 success.jsp 的页面 // 模拟从数据库中查询所有的用户信息
List<User> users = new ArrayList<>();
User user1 = new User();
user1.setUsername("张三");
user1.setPassword("123");
User user2 = new User();
user2.setUsername("赵四");
user2.setPassword("456");
users.add(user1);
users.add(user2); mv.addObject("users", users); return mv;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Success</title>
</head>
<body>
${users}
</body>
</html>

请求转发和重定向

forward 请求转发,Controller 方法返回 String 类型,想进行请求转发也可以编写成:

@Controller
@RequestMapping(path = {"/"})
public class ForwardAndRedirectController { @RequestMapping(path = "/testForward")
public String testForward() {
System.out.println("请求转发"); return "forward:/WEB-INF/views/success.jsp";
}
}

值得注意的是,如果用了 formward: 则路径必须写成 实际视图 url,不能写逻辑视图。使用请求转发,既可以转发到 jsp,也可以转发到其他的控制器方法。


redirect 重定向,Controller 方法返回 String 类型,想进行重定向也可以编写成:

@Controller
@RequestMapping(path = {"/"})
public class ForwardAndRedirectController { @RequestMapping(path = "/testRedirect")
public String testRedirect() {
System.out.println("请求重定向"); return "redirect:/index.jsp";
}
}

值得注意的是,jsp 页面不能写在 WEB-INF 目录中,否则无法找到。


请求转发,是指服务器收到请求后,从一个资源跳转到另一个资源的操作叫请求转发。

请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问(因为之前的地址可能已经被废弃)。

请求转发的特点

  • 浏览器地址栏没有变化;
  • 它们是一次请求;
  • 它们共享 Request 域中的数据;
  • 可以转发到 WEB-INF 目录下;
  • 不可以访问工程以外的资源。

请求重定向的特点

  • 浏览器地址栏会发生变化;
  • 两次请求;
  • 不共享 Request 域中的数据;
  • 不能访问 WEB-INF 下的资源;
  • 可以访问工程外的资源。

@ResponseBody

这个注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json、xml 等,通过 Response 响应给客户端。

值得注意的是,SpringMVC 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换,所以需要加入jackson 的依赖。

 <properties>
<jsckson.version>2.10.5</jsckson.version>
</properties> <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jsckson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jsckson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jsckson.version}</version>
</dependency>

DispatcherServlet 会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决方法就是需要配置静态资源不进行拦截,在 SpringMVC 配置文件添加如下配置:

    <!-- 设置静态资源不过滤 -->
<mvc:resources mapping="/static/js/**" location="/static/js/"/>
<mvc:resources mapping="/static/css/**" location="/static/css/"/>
<mvc:resources mapping="/static/images/**" location="/static/images/"/>

需求:使用 @ResponseBody 注解实现将 Controller 方法返回对象转换为 json 响应给客户端。


responseBoby.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>ResponseBody响应json数据</title>
<script type="text/javascript" src="static/js/jquery.js"></script>
<%-- <script src="${ctx}/webjars/jquery/3.5.1/jquery.min.js"></script>--%>
<script>
$(function () {
$("#btn").click( function () {
// alert("hello"); $.ajax({
// 编写 JSON 格式,设置属性和值
url: "user/testAjax",
contentType: "application/json;charset=UTF-8",
data: '{"username": "parzulpan潘", "password": "parzulpan0101"}',
dataType: "json",
type: "post",
success: function (data) {
// 服务器端响应的 JSON 数据
alert(data);
alert(data.password);
}
});
});
});
</script>
</head>
<body> <button id="btn">发送 AJAX 请求</button> </body>
</html>

UserController.java

package cn.parzulpan.web.controller;

/**
* @Author : parzulpan
* @Time : 2020-12
* @Desc :
*/ @Controller
@RequestMapping(path = {"/user"})
public class UserController { /**
* 模拟异步请求响应
* @return
*/
@RequestMapping(path = {"/testAjax"})
public @ResponseBody User testAjax(@RequestBody User user) {
System.out.println("called testAjax...");
System.out.println(user);
user.setPassword("Mparzulpan0101");
return user;
}
}

练习和总结

【SpringMVC】SpringMVC 响应数据的更多相关文章

  1. 4.学习springmvc的响应数据和结果视图

    一.返回值分类: 字符串:返回值为需要展示的视图 void:返回为默认的页面(方法名.jsp) ModleAndView:存储对象并返回设置的页面 1.字符串: jsp: <a href=&qu ...

  2. Java框架之SpringMVC 03-RequestMapping-请求数据-响应数据

    SpringMVC SpringMVC是一种轻量级的.基于MVC的Web层应用框架. 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口. 采用了松散耦合可插拔组件结构,比 ...

  3. springmvc 怎么响应json数据

    springmvc 怎么响应json数据@Controller@RequestMapping("/items") class ItemsController{  @RequestM ...

  4. SpringMVC_01 SpringMVC五大组件、SpringMVC编程步骤(不使用注解进行配置)、SpringMVC编程步骤(利用注解进行配置)、参数获取、响应数据

    1 什么是SpringMVC 是一个mvc框架,用来简化基于mvc架构的web应用程序的 开发. 2 SpringMVC五大组件 DispatcherServlet (前端控制器) HanlderMa ...

  5. SpringMvc响应数据和结果视图

    响应数据和结果视图 返回值分类 字符串 controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址. //指定逻辑视图名,经过视图解析器解析为 jsp 物理路径:/WEB ...

  6. 响应数据传出(springMVC)

    1.    SpringMVC 输出模型数据概述 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据 ...

  7. spring-mvc实现模拟数据到网页展示过程代码

    spring-mvc实现模拟数据到网页展示过程代码 先看看我们的3种模拟数据到网页展示的思路图: 1.当mybatis的环境配置完成.一个动态Web项目建立好.开始导入jar包. -spring的ao ...

  8. 解决ajax请求(SpringMVC后台)响应415/400/405错误

    解决ajax请求(SpringMVC后台)响应415/400/405错误 后端代码 bean public class user { private String username; private ...

  9. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

随机推荐

  1. NOI2020网上同步赛 游记

    Day1 预计得分:\(32pts\)(我裂开了--) T1 美食家 表示考试的时候想到了关于矩阵快速幂的想法,甚至连分段后怎么处理都想好了,但是没有想到拆点,还有不知道怎么处理重边(这个考虑是多余的 ...

  2. 算法——n皇后问题

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解法包含一个明确的 n 皇后问题的棋 ...

  3. uniapp云打包配置讲解

    HBuilderX开发工具,菜单栏:发行(U) → 原生App云打包(P) 安卓云打包配置: 云打包配置分为公共测试证书和自有证书. 云打包配置使用公共测试证书很简单,直接勾选后打包. 如果要测试第三 ...

  4. sqli-labs less1-4(union注入)

    less-1 考点:Single quotes 输入: 判断类型 ?id=1 返回loginname和password.输入的id就是与后台数据库连接的接口通过id=? 查询数据库信息 ?id=1' ...

  5. selenium_学习笔记——二次封装常用的方法

    # coding = utf-8 ''' 二次封装元素方法 加入循环查找方法,提高查找元素的稳定性 ''' from selenium import webdriver from selenium.w ...

  6. Flink集群监控

    prometheus+grafana 监控hadoop.yarn https://blog.csdn.net/c275090933/article/details/82108014 Prometheu ...

  7. CTF练习三 —— 命令注入&命令执行绕过

    这个题是第四届强网杯也就是2020.8.22号开始的那场一道简单的命令注入题,再这之前我并没有学习过命令注之类的知识,,,看到题之后先搜在学,,误打误撞解了出来,过段时间wp就会放出来,所以这里就不对 ...

  8. Helm 带你飞

    文章目录 目录 文章目录 在没使用 Helm之前,向 K8S部署应用,我们要依次部署 deployment. svc 等,步骤较繁琐.况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复 ...

  9. 图解JanusGraph系列 - JanusGraph指标监控报警(Monitoring JanusGraph)

    大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 整理所有图相关文章,请移步(超链):图数据库系列-文章总目录 源码分析相关可查看github(码文不易,求个sta ...

  10. 你真的理解了java单例模式吗?讲别人都忽略的细节!

    前言:老刘这篇文章敢做保证,java的单例模式讲的比大多数的技术博客都要好,讲述别人技术博客都没有的细节!!! 1 java单例模式 直接讲实现单例模式的两种方法:懒汉式和饿汉式,单例模式的概念自己上 ...