SpringMVC响应使用案例(带数据页面跳转,快捷访问路径,返回json数据)

2023-11-08

页面跳转

  • 转发(默认)
@RequestMapping("/showPage1")
public String showPage1() {
    System.out.println("user mvc controller is running ...");
    // return "WEB_INF/pages/forward:page.jsp";这种方式不支持重定向,只能支持转发格式的
    return "forward:page.jsp";
}
  • 重定向
@RequestMapping("/showPage2")
	public String showPage2() {
	System.out.println("user mvc controller is running ...");
	return "redirect:page.jsp";
}

注意:
1、页面访问地址中所携带的 /
2、如果目录是在其它层级,那么在返回时候需要加上层级目录

页面访问快捷设定 (InternalResourceViewResolver)

  • 展示页面的保存位置通常固定,且结构相似,可以设定通用的访问路径,简化页面配置格式,在运行的时候会自动把设置的路径拼接上去。
  • 如果配置了快捷的这种方式,是不支持使用转发和重定向的。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

	<!-- 
		prefix:前缀 
		suffix:后缀
	-->
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
/bean>

在代码里因为配置文件已经做了拼接了,所以直接写页面名称就可以了,不需要写前后缀了

public String showPage3() {
    return "page";
}

如果未设定返回值,使用void类型,则默认使用访问路径作页面地址的前缀后缀

//最简页面配置方式,使用访问路径作为页面名称,省略返回值
@RequestMapping("/page")
public void showPage5() {
    System.out.println("user mvc controller is running ...");
}

带数据页面跳转

方式一:使用HttpServletRequest类型形参进行数据传递

@RequestMapping("/showPageAndData1")
public String showPageAndData1(HttpServletRequest request) {
    request.setAttribute("name","itzhuzhu");
    return "page";
}

page.jsp

${name}

方式二:使用Model类型形参进行数据传递

@RequestMapping("/showPageAndData2")
public String showPageAndData2(Model model) {
    model.addAttribute("name","itzhuzhu");
    Book book = new Book();
    book.setName("SpringMVC入门实战");
    book.setPrice(66.6d);
    model.addAttribute("book",book);
    return "page";
}

方式三:使用ModelAndView类型形参进行数据传递,将该对象作为返回值传递给调用者

//使用ModelAndView形参传递参数,该对象还封装了页面信息
@RequestMapping("/showPageAndData3")
public ModelAndView showPageAndData3(ModelAndView modelAndView) {
    //ModelAndView mav = new ModelAndView();    替换形参中的参数
    // 转发和重定向不能加xml快捷页面访问
    // 转发
    modelAndView.setViewName(forward:page.jsp");
    // 重定向
    modelAndView.setViewName("redirect:page.jsp");
    Book book  = new Book();
    book.setName("SpringMVC入门案例");
    book.setPrice(66.66d);
    //添加数据的方式,key对value
    modelAndView.addObject("book",book);
    //添加数据的方式,key对value
    modelAndView.addObject("name","Jockme");
    //设置页面的方式,该方法最后一次执行的结果生效
    modelAndView.setViewName("page");
    //返回值设定成ModelAndView对象
    return modelAndView;
}

三种方式总结:

  • String:仅封装页面的基本信息,底层由ModeAndView实现
  • Model:仅封装数据
  • ModelAndView:封装数据并封装视图,包含Model和View两个对象

返回json数据

需要先导入json的三个坐标:

    <!--json相关坐标3个-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>

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

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

方式一:基于response返回数据的简化格式,返回JSON数据

//使用jackson进行json数据格式转化
@RequestMapping("/showData3")
@ResponseBody  //将java对象转为json格式的数据
public String showData3() throws JsonProcessingException {
    Book book  = new Book();
    book.setName("SpringMVC入门案例");
    book.setPrice(66.66d);

    ObjectMapper om = new ObjectMapper();
    return om.writeValueAsString(book);
}

方式二:使用SpringMVC提供的消息类型转换器将对象与集合数据自动转换为JSON数据

//使用SpringMVC注解驱动,对标注@ResponseBody注解的控制器方法进行结果转换,由于返回值为引用类型,自动调用jackson提供的类型转换器进行格式转换
@RequestMapping("/showData4")
@ResponseBody
public Book showData4() {
    Book book  = new Book();
    book.setName("SpringMVC入门案例");
    book.setPrice(66.66d);
    return book;
}

需要手工添加信息类型转换器

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
        </list>
    </property>
</bean
  • 方式三:使用SpringMVC注解驱动简化配置
<!--开启springmvc注解驱动,对@ResponseBody的注解进行格式增强,追加其类型转换的功能,具体实现由MappingJackson2HttpMessageConverter进行-->
<mvc:annotation-driven/>

注解驱动格式:

@EnableWebMvc // 加这个注解
public Book showData5() {}

Servlet相关接口-Servlet相关接口替换方案

SpringMVC提供访问原始Servlet接口API的功能,通过形参声明即可

@RequestMapping("/servletApi")
public String servletApi(HttpServletRequest request,
                         HttpServletResponse response, 
                         HttpSession session){
    System.out.println(request);
    System.out.println(response);
    System.out.println(session);
    request.setAttribute("name","itzhuzhu");
    System.out.println(request.getAttribute("name"));
    return "page.jsp";
}

Head数据获取

  • 名称: @RequestHeader
  • 类型: 形参注解
  • 位置:处理器类中的方法形参前方
  • 作用:绑定请求头数据与对应处理方法形参间的关系
@RequestMapping("/headApi")
public String headApi(@RequestHeader("Accept-Language") String head){
    System.out.println(head);
    return "page.jsp";
}

Cookie数据获取

  • 名称: @CookieValue
  • 类型: 形参注解
  • 位置:处理器类中的方法形参前方
  • 作用:绑定请求Cookie数据与对应处理方法形参间的关系
@RequestMapping("/cookieApi")
public String cookieApi(@CookieValue("JSESSIONID") String jsessionid){
    System.out.println(jsessionid);
    return "page.jsp";
}

Session数据获取

  • 名称: @SessionAttribute
  • 类型: 形参注解
  • 位置:处理器类中的方法形参前方
  • 作用:绑定请求Session数据与对应处理方法形参间的关系
@RequestMapping("/sessionApi")
public String sessionApi(@SessionAttribute("name") String name,
                         @SessionAttribute("age") int age){
    System.out.println(name);
    System.out.println(age);
    return "page.jsp";
}

Session数据设置

  • 名称: @SessionAttributes
  • 类型: 类注解
  • 位置:处理器类上方
  • 作用:声明放入session范围的变量名称,适用于Model类型数据传参
@Controller
@SessionAttributes(names={"name"})
public class ServletController {
    @RequestMapping("/setSessionData2")
    public String setSessionDate2(Model model) {
        model.addAttribute("name", "Jock2");
        return "page.jsp";
    }
}

注解式参数数据封装底层原理

  • 数据的来源不同,对应的处理策略要进行区分
  • Head
  • Cookie
  • Session
  • SpringMVC使用策略模式进行处理分发
  • 顶层接口: HandlerMethodArgumentResolver
  • 实现类: ……
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC响应使用案例(带数据页面跳转,快捷访问路径,返回json数据) 的相关文章

随机推荐

  • 异常eclipse Hadoop Failed to set permissions of path的解决

    eclipse Hadoop Failed to set permissions of path window下在eclipse中执行hadoop程序时报错 如下 原因文末有写 来自网友 所有的解决方案都是修改FileUitl文件 然后重新
  • 串口 同步和异步 理解

    串口 同步和异步 理解 https blog csdn net cs74184235 article details 48438727 本文主要三大块 一 串口同步和异步在底层通信上的区别 这部分点到为止 不是主要探讨内容 有个基本理解即可
  • 信捷plc,9伺服通用程序架构

    信捷plc 9伺服通用程序架构 程序已经升级 程序高度模块化 可轻易拓展十几二十多个轴 plc是目前性价比最高的方案 60个点10轴高速脉冲输出 走s形 正弦曲线加减速 程序采用C语言 梯形图架构 玩转信捷系统 可运用于三菱 西门子 欧姆龙
  • 小游戏 《唐僧大战白骨精》

    小游戏 唐僧大战白骨精 有点小无语的小游戏 当时做的还挺认真的 rint 欢迎光临 xxx 游戏 n 请选择你的身份 n 1 唐僧 n 2 白骨精 n sf input 请选择 1 2 if sf 1 print 你已经选择了1 你将以 g
  • pandas写入字典,或者pandas以各种格式输出数据

    1 将字典列表写入到pandas import pandas as pd rows buyer percent 23 2 tier city 1 buyer percent 18 54 tier city 2 df pd DataFrame
  • Python中利用xpath解析HTML的方法

    本文主要介绍了Python中利用xpath解析HTML的方法 利用其lxml html的xpath对html进行分析 获取抓取信息 具有一定的参考价值 感兴趣的小伙伴们可以参考一下 在进行网页抓取的时候 分析定位html节点是获取抓取信息的
  • SpringBoot整合LogBack

    本文演示SpringBoot整合LogBack 一 项目搭建 新建一个SpringBoot项目 引入依赖
  • 【shell中判断是否是整数】

    方法一 使用expr 看该数字是否可以进行加运算 root manager day4 cat ifnum sh bin bash Author pyy Date 2020 06 15 FileName ifnum sh 判断用户输入的是否是
  • Java是值传递还是引用传递?区别是什么?

    文章目录 值传递 引用传递 两者区别 Java到底是值传递还是引用传递 在Java中参数的传递主要有两种 值传递和 引用传递 值传递 实参传递给形参的是值 形参和实参在内存上是两个独立的变量 对形参做任何修改不会影响实参 也就是说 在方法调
  • Java 数组 初始化方式 和遍历方式

    Java 数组 初始化方式总结 第一种 静态初始化 所谓静态初始化 初始化时由程序员显式指定每个数组元素的初始值 有系统决定数组的长度 简单实例 String strArr 张三 李四 王五 第二种 动态初始化 所谓动态初始化 初始化时由程
  • CTF-Web13(涉及哈希长度扩展攻击,难度偏大)

    13 让我进去 首先拿到题目 查看源代码 源代码没问题 直接开始burpsuite尝试key 两行直接admin admin测试 通过burpsuite可以看到以下内容 在Response中看到set cookies无疑是最容易注意到的东西
  • sql查询小记

    1 在MySQL中判断某个字段是否为空需要使用IS NULL 或者 IS NOT NULL 在MySQL5 2 7中测试通过 例子1 Select FROM Test WHERE CODE IS NULL 例子2 Select FROM T
  • 等保测评--通信网络安全测评要求

    信息安全等级保护 是对信息和信息载体按照重要性等级分级别进行保护的一种工作 在中国 美国等很多国家都存在的一种信息安全领域的工作 在中国 信息安全等级保护广义上为涉及到该工作的标准 产品 系统 信息等均依据等级保护思想的安全工作 狭义上一般
  • Python的迭代器和生成器使用示例

    迭代器和生成器是Python中强大而灵活的工具 用于处理可迭代对象的数据 它们提供了一种高效的方式来遍历和处理大型数据集 同时节省内存 在本文中 我们将介绍迭代器和生成器的概念 并提供一些实例来展示它们的用法 迭代器 Iterators 迭
  • repeat多级嵌套

    效果图 前台的 repeat asp 代码 C 代码
  • python爬虫——校花网

    爬取校花网图片 校花网http www xiaohuar com list 1 0 html 1 进入网站 我们会发现许多图片 这些图片就是我们要爬取的内容 2 对网页进行分析 按F12打开开发着工具 本文使用谷歌浏览器 我们发现每个图片都
  • 组合优化问题

    我们经常会遇到需要寻找一个最优方案的问题 也即最优化问题 我们首先对实例和问题做一个区分 在本课程中 不失一般性地 当我们在做一般性讨论的时候 都假定所讨论的最优化问题是最小化问题 定义1 1 1 最优化问题的实例 一个最优化问题的一个实例
  • 使用opencv识别视频中的数字识别

    使用OpenCV识别视频中的数字 需要对视频帧进行图像处理 以提取数字 一种常用的方法是使用边缘检测算法 如Canny边缘检测 检测图像中的边缘 然后 使用数字识别技术 如光学字符识别 OCR 识别图像中的数字 最后 使用算法对识别结果进行
  • ESP8266——AT指令发送POST请求

    AT指令发送POST请求 AT指令发送流程 注意 在串口助手调试过程中 每次发送都要加上 换行 且不能有多于的 空格 否则8266会将发送的数据原样返回 AT 返回值为OK AT CWMODE 1 返回值为OK 设置模块为STA模式 此时可
  • SpringMVC响应使用案例(带数据页面跳转,快捷访问路径,返回json数据)

    页面跳转 转发 默认 RequestMapping showPage1 public String showPage1 System out println user mvc controller is running return WEB