SpringMVC的配置响应-页面跳转,回写数据

springmvc数据响应方式:

页面跳转:直接返回字符串,通过ModelAndView对象返回

回写数据:直接返回字符串,返回对象或集合

一、页面跳转

特征:无 @ResponseBody

1.最原始的 ModelAndView

java 复制代码
@RequestMapping("/quick2")
public ModelAndView save2(){
    ModelAndView mv = new ModelAndView();
    mv.addObject("username", "itcast");   // 数据→request域
    mv.setViewName("success");            // 逻辑视图名
    return mv;                            // 跳 /jsp/success.jsp
}

2.Spring 帮你注入 ModelAndView(写法更简洁)

java 复制代码
@RequestMapping("/quick3")
public ModelAndView save3(ModelAndView mv){  // 容器帮你 new 好
    mv.addObject("username","qcby");
    mv.setViewName("success");
    return mv;                                 // 同样跳 success.jsp
}

区别:不用自己 new ModelAndView() ,其余跟 quick2 一模一样。

3.主流简化写法(最常用)

java 复制代码
@RequestMapping("/quick4")
public String save4(Model model){
    model.addAttribute("username","博学");   // 数据→request域
    return "success";                        // 只返回逻辑视图名
}

4.最底层 Servlet 存数据(不推荐)

java 复制代码
@RequestMapping("/quick5")
public String save5(HttpServletRequest request){
    request.setAttribute("username","酷丁鱼"); // 原生 API 手动塞 request
    return "success";                         // 照样跳 success.jsp
}

5.直接写死 JSP 路径(最原始)

java 复制代码
@RequestMapping("/quick")
public String save(){
    return "/jsp/success.jsp";   // 物理路径,绕过视图解析器
}

二、回写数据

特征:直接把内容写进响应体,浏览器地址栏不会变,也不会渲染 JSP。
按"技术深浅"再分 3 小层。

1.最底层 ------ Servlet API

java 复制代码
@RequestMapping("/quick6")
public void save6(HttpServletResponse response) throws IOException {
    response.getWriter().print("hello itcast");   // 纯手工写流
}

2. Spring 帮写字符串 ------ @ResponseBody + String

java 复制代码
// quick7
@RequestMapping("/quick7")
@ResponseBody   // 告诉 Spring:别跳页面,直接把返回值写出去
public String save7(){
    return "hello";                // 浏览器收到纯文本 hello
}

// quick8
@RequestMapping("/quick8")
@ResponseBody
public String save8(){
    return "{\"username\":\"zhangsan\",\"age\":18}"; // 浏览器收到 JSON 串
}

3. Spring 自动转 JSON ------ @ResponseBody + JavaBean

java 复制代码
// quick9:手动转
@RequestMapping("/quick9")
@ResponseBody
public String save9() throws IOException {
    User user = new User("lisi",30);
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(user);   // 手写 JSON
}

// quick10:自动转(推荐)
@RequestMapping("/quick10")
@ResponseBody
public User save10(){                         // 直接返回对象
    return new User("lisi",30);               // Spring 调用 Jackson 转 JSON
}

// quick11:只收参数,不返回内容(void)
@RequestMapping("/quick11")
@ResponseBody
public void save11(String username,int age){
    System.out.println(username+"  "+age);     // 控制台打印,浏览器 204
}

SpringMVC 响应两大门派
├─ 页面跳转(返回 HTML) 特征:无 @ResponseBody
│ ├─ ModelAndView 自 new → quick2
│ ├─ ModelAndView 注入 → quick3
│ ├─ String 视图名 + Model → quick4(最常用)
│ ├─ HttpServletRequest 存 → quick5
│ └─ 死路径字符串 → quick
│
└─ 回写数据(返回文本/JSON) 特征:有 @ResponseBody 或 void
├─ 最底层 Servlet API → quick6
├─ 框架写字符串 → quick7 / quick8
└─ 框架自动转 JSON → quick9 / quick10
└─ void 只收参数 → quick11

相关推荐
代码山河3 分钟前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目
vx_Biye_Design4 分钟前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
李游Leo5 分钟前
HarmonyOS 7 QuickDock 闪控窗开发实录 02:floatView × floatingBall:形态切换、位置恢复与单一状态源【鸿蒙心迹】
java·华为·harmonyos
企业数字化笔记6 分钟前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频
仍然.12 分钟前
Redis---主从复制
java·数据库·redis
vx_Biye_Design16 分钟前
springboot咖啡厅顾客点单管理系统12080-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·课程设计·express
QQ_216962909619 分钟前
基于微信小程序的智能膳食分析系统
java·大数据·spring boot·微信小程序·小程序·旅游
海绵宝宝转agent23 分钟前
Leetcode100 二叉树的中序遍历
java·算法
砚底藏山河27 分钟前
量化实战:行情数据 Schema 演进与向后兼容
java·python·金融·maven
专业程序开发源27 分钟前
flask动漫推荐系统32319-计算机课程设计、毕业设计
java·spring boot·后端·django·flask·php·课程设计