Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringMVC(七):SpringMVC的响应处理

SpringMVC(七):SpringMVC的响应处理

原创
作者头像
Lansonli
发布于 2022-12-26 16:48:29
发布于 2022-12-26 16:48:29
69800
代码可运行
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客
运行总次数:0
代码可运行

​SpringMVC的响应处理

在学习了SpringMVC的配置流程以及单元方法请求数据的获取后,我们可以使用SpringMVC搭建一个项目,在单元方法中使用SpringMVC提供的方式来获取请求信息,然后根据功能需求,声明请求处理的逻辑代码,进行请求的处理。当请求处理完成后,我们需要将此次请求的处理结果响应给浏览器,以前我们是自己在Servlet中使用response对象来完成响应的,那么在SpringMVC中如何响应请求的处理结果呢?

一、单元方法返回值为void

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RequestMapping("/testReturnVoid") 
public void testReturnVoid() throws Exception { 
    System.out.println("AccountController 的 testForward 方法执行了。。。。");
}

在SpringMVC中如果对于当前的控制单元,没有写对应的返回值,这个时候SpringMVC就会找和自己控制单元名称一致的页面展示,如果没有配置视图解析器的前缀和后缀是没有产生404,需要注意控制单元仍然可以进。

二、转发和重定向ServletAPI 实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   @RequestMapping("demo1")
    public void testDemo1(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 请求转发
        //request.getRequestDispatcher("/forward.jsp").forward(request,response);
        // 响应重定向
        response.sendRedirect(request.getContextPath()+"/redirect.jsp");
    }

单元方法的返回值类型设置void。因为使用response对象在单元方法中直接对此次请求进行了响应,不再通过DispatcherServlet了,既然已经响应了,就不需要再给DispatcherServlet返回值了。在单元方法上声明HttpServletResponse形参,来接收此次请求的response对象。

三、使用forward关键字完成响应

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /*
    * 返回字符串告诉DispatcherServlet跳转的路径
    * 在路径之前放上一个forward: 关键字,就是请求转发
    * 如果路径前的关键字是forward,那么可以省略不写
    * */
    @RequestMapping("demo2")
    public String testDemo2() throws Exception {
        //return "forward:/forwardPage.jsp";
        return "/forwardPage.jsp";
    }

使用通过单元方法的返回值来告诉DispatcherServlet请求转发指定的资源,如果是请求转发,forward关键字可以省略不写的

四、使用redirect关键字完成响应

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /*
     * 返回字符串告诉DispatcherServlet跳转的路径
     * 在路径之前放上一个redirect: 关键字,就是重定向
     * 如果路径前的关键字是redirect,那么不可以省略
     * /表示当前项目下.这里不需要项目的上下文路径
     * */
    @RequestMapping("demo3")
    public String testDemo3() throws Exception {
        return "redirect:/redirectPage.jsp";
    }

使用通过单元方法的返回值来告诉DispatcherServlet重定向指定的资源,注意这个redirect关键字不可以省去

五、使用View视图转发和重定向

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @RequestMapping("demo4")
    public View testDemo4(HttpServletRequest req)   {
        View  view =null;
        // 请求转发
        //view =new InternalResourceView("/forwardPage.jsp");
        // 重定向
        view=new RedirectView(req.getContextPath()+"/redirectPage.jsp");
        return view;
    }

RedirectView中所做的操作,最终的实现是在renderMergedOutputModel中完成实现的,简单来说RedirectView实现了链接的重定向,并且将数据保存到FlashMap中,这样在跳转后的链接中可以获取一些数据

六、使用ModelAndView转发重定向

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @RequestMapping("demo5")
    public ModelAndView testDemo5(HttpServletRequest req)   {
        ModelAndView mv=new ModelAndView();
        // 请求转发
        //mv.setViewName("forward:/forwardPage.jsp");
        //mv.setView(new InternalResourceView("/forwardPage.jsp"));
        // 重定向
        //mv.setViewName("redirect:/redirectPage.jsp");
        mv.setView(new RedirectView(req.getContextPath()+"/redirectPage.jsp"));
        return mv;
    }

ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。

七、ResponseBody响应json数据

当浏览器发起一个ajax请求给服务器,服务器调用对应的单元方法处理ajax请求。而ajax的请求在被处理完成后,其处理结果需要直接响应。而目前我们在单元方法中响应ajax请求,使用的是response对象,需要我们自己将要响应的数据转换json字符串响应,比较麻烦,而我们一直希望在单元方法中无论是否是ajax请求,都使用return语句来完成资源的响应,怎么办?

既然我们希望使用单元方法的返回值来响应ajax请求的处理结果,而目前DispatcherServlet的底层会将单元方法的返回值按照请求转发或者重定向来处理,所以就需要我们告诉DispatcherServlet,单元方法的返回值不要按照请求转发或者重定向处理,而是按照直接响应处理,将单元方法的返回值直接响应给浏览器。

1、导入jackson的jar

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.1</version>
  </dependency>

2、 声明单元方法处理ajax请求,并在单元方法上新增注解@ResponseBody

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /*
     * @ResponseBody
     * 1方法的返回值不在作为界面跳转依据,而已直接作为返回的数据
     * 2将方法的返回的数据自动使用ObjectMapper转换为JSON
     */
    @ResponseBody
    @RequestMapping("testAjax")
    public Pet testAjax(Person p) throws JsonProcessingException {
        System.out.println(p);
        Pet pet =new Pet("Tom","cat");
        return pet;
    }

注意:把我们要响应的数据直接return即可,返回值类型为要return的数据类型。

3、在ajax的回调函数中,无需再次使用eval函数将响应数据转换为json对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
    <script>
        $(function(){
            $("#btn").click(function(){
                $.get("testAjax",{pname:"小明",page:"10"},function(data){
                    console.log(data.petName)
                    console.log(data.petType)
                })
            })
        })
    </script>
</head>
<body>
<input id="btn" type="button" value="testJSON">
</body>
</html>

关于 @RestController

相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
public class AjaxController {
    /*
     * @ResponseBody
     * 1方法的返回值不在作为界面跳转依据,而已直接作为返回的数据
     * 2将方法的返回的数据自动使用ObjectMapper转换为JSON
     */
    @RequestMapping("testAjax")
    public Pet testAjax(Person p) throws JsonProcessingException {
        System.out.println(p);
        Pet pet =new Pet("Tom","cat");
        return pet;
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
springmvc返回值类型及响应数据类型
字符串 controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址 例: jsp
暴躁的程序猿
2022/03/23
2.1K0
深度学习springMVC(五)一篇文章讲清楚 SpringMVC的视图解析器和 自定义视图解析器(看不懂你打我)
我们在使用了SpringMVC后,对于请求的处理由以前我们自己声明 Servlet处理,变为声明单元方法来处理。请求处理完成之后,需要将 处理结果响应给浏览器 ,响应方式有直接响应,请求转发,重定向。对于 请求转发和重定向,我们在单元方法中是通过返回值来告诉 DispatcherServlet如何进行此次请求的响应。而方法的返回值只有一个,所 以,我们就需要在返回值值中声明指定的关键字,让DispatcherServlet可以 通过关键字来区分是请求转发还是重定向,那么DispactherServlet底层是 如何来实现请求转发和重定向的区分的呢?
一写代码就开心
2021/07/08
8690
Spring学习笔记(八)——SpringMVC响应数据和结果视图
DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置 mvc:resources标签配置不过滤 1. location元素表示webapp目录下的包下的所有文件 2. mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
不愿意做鱼的小鲸鱼
2022/09/24
6730
SpringMVC之响应数据和结果视图
controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
yuanshuai
2022/08/22
4060
SpringMVC之响应数据和结果视图
快速学习-SpringMVC响应数据和结果视图
controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
cwl_java
2020/04/08
6000
SpringMVC--请求和响应
上篇SpringMVC--初入SpringMVC中,我们对SpringMVC有了初步的认识,作为开发者,我们日常使用SpringMVC,只需要关注Controller层的业务代码,其余的都由SpringMVC容器帮助处理。
aruba
2022/05/25
4920
SpringMVC--请求和响应
SpringMVC学习笔记 (day2)
添加 jar 包 即可,开两个 Tomcat服务器,使用不同的端口进行跨服务器上传文件
Gorit
2021/12/08
3210
SpringMVC学习笔记 (day2)
深度学习springMVC(四)springmvc如何实现数据的响应,SpringMVC中使用作用域对象完成数据的流转(看不懂你打我)
深度学习springMVC(二)SpringMVC中单元方法如何获取请求数据,5种方法(看不懂你打我)
一写代码就开心
2021/07/08
8080
SpringMVC笔记
​ MVC是Model、View、Controller的缩写,分别代表Web应用程序中的3种职责。
技术交流
2022/11/18
2.5K0
SpringMVC笔记
Java-springmvc
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
知识浅谈
2021/11/08
9250
Java-springmvc
深度学习springMVC(九)SpringMVC对Ajax请求的处理
当浏览器发起一个ajax请求给服务器,服务器调用对应的单元方法处理ajax请求。 而ajax的请求在被处理完成后,其处理结果需要直接响应。而目前我们在单元方 法中响应ajax请求,使用的是response对象,需要我们自己将要响应的数据转换 为json字符串响应,比较麻烦,而我们一直希望在单元方法中无论是否是ajax请 求,都使用return语句来完成资源的响应,怎么办?
一写代码就开心
2021/07/08
5080
SpringMVC知识体系搭建
< context:component-scan/> 扫描指定的包中的类上的注解,常用的注解有:
时间静止不是简史
2020/07/25
2.2K0
SpringMVC知识点 总结
MVC模式使应用程序的不同方面(输入逻辑,业务逻辑 和 UI逻辑)分离,同时提供这些元素之间的松耦合。
SuperHeroes
2019/03/12
1.3K0
SpringMVC知识点 总结
SpringMvc基础知识
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框 架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
王念博客
2019/07/24
5620
第二章 SpringMVC
Component (controller service Repository)
张哥编程
2024/12/07
2680
SSM的最后一剑-SpringMVC
    为了使Spring有可插入的MVC架构,SpringFrameWork在Spring基础上开发SpringMVC框架,从而在使用Spring进行WEB开发时可以选择使用Spring的SpringMVC框架作为web开发的控制器框架。
上分如喝水
2021/08/16
1.1K0
SSM的最后一剑-SpringMVC
JAVAEE框架技术之4springMVC入门
MVC是模型(Model) 、视图(View) 、控制器(Controller) 的缩写,是一种软件设计规范。
张哥编程
2024/12/13
1720
JAVAEE框架技术之4springMVC入门
SpringMVC学习笔记
V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
SerMs
2022/03/31
1.8K0
SpringMVC学习笔记
SpringMVC:基本应用
MVC 是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的开发思想。
RendaZhang
2020/09/16
1.4K0
SpringMVC:基本应用
SpringMVC 视图解析器 方法返回值 异常处理器
在Spring MVC中,提供了一个全局异常处理器,用于对系统中出现的异常进行统一的处理。在一般的系统中,DAO,Service及Controller层都出现的异常都以“throws Exception”的形式向上层抛出,最后都会由Spring MVC的前端控制器DispatcherServlet统一由全局异常处理器进行异常处理。
陶然同学
2023/02/24
4060
SpringMVC 视图解析器 方法返回值 异常处理器
相关推荐
springmvc返回值类型及响应数据类型
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验