当前位置: 首页 > news >正文

深入解析:【Spring MVC终极指南】一文掌握请求处理与响应!从Servlet原生方式到SpringMVC高效优雅写法

深入解析:【Spring MVC终极指南】一文掌握请求处理与响应!从Servlet原生方式到SpringMVC高效优雅写法

一、环境准备

首先,我们有一个基本的Spring MVC控制器类DeptController,它包含了多种请求处理方式:

package com.qcby.controller;
import com.qcby.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("dept")
public class DeptController {
// 多种请求处理方式将在下面详细展开
}

二、ModelAndView方式

//方式1
@RequestMapping("/save")
public ModelAndView save(){
ModelAndView mv = new ModelAndView();
mv.addObject("msg","save success");
mv.setViewName("suc");
return mv;
}

特点:​

  • 传统的Spring MVC方式
  • 可以同时设置视图名称和模型数据
  • 适合需要向视图传递数据的场景

三、原生Servlet API方式

1. 直接响应JSON数据

//servlet
@RequestMapping("/test1")
public void test1(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/json;charset=utf-8");
String json = "{\"id\":1,\"name\":\"test1\"}";
response.getWriter().write(json);
}

2. 请求转发

//请求转发
@RequestMapping("/test2")
public void test2(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
System.out.println("test2");
String name = request.getParameter("name");
System.out.println(name);
request.setAttribute("password","123456");
request.getRequestDispatcher("/html/suc.html").forward(request,response);
}
@RequestMapping("/test3")
public void test3(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("test3");
String name = request.getParameter("name");
String password = (String)request.getAttribute("password");
System.out.println(name);
System.out.println(password);
}

3. 重定向

//重定向
@RequestMapping("/test4")
public void test4(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("test4");
response.sendRedirect("/qcby03/html/suc.html");
}
@RequestMapping("/test5")
public void test5(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("test5");
}

原生方式特点:​

  • 直接使用Servlet API
  • 灵活性高,但代码较为繁琐
  • 需要手动处理请求/响应对象

四、Spring MVC高级方式

1. 普通视图返回

//普通返回
@RequestMapping("/test6")
public String test6(){
return "/html/suc.html";
}

2. 请求转发(Spring MVC风格)

//请求转发
@RequestMapping("/test7")
public String test7(){
return "forward:/html/suc.html";
}

3. 重定向(Spring MVC风格)

//重定向
@RequestMapping("/test8")
public String test8(){
return "redirect:/html/suc.html";
}

Spring MVC方式特点:​

  • 代码简洁,易于维护
  • 充分利用Spring MVC的特性
  • 推荐使用的方式

五、JSON响应处理

1. 手动构建JSON响应

@RequestMapping("/test9")
@ResponseBody
public String test9(){
String json = "{\"id\":1,\"name\":\"test1\"}";
return json;
}

2. 对象自动转换为JSON

@RequestMapping("/test10")
@ResponseBody
public User test10(){
User user = new User();
user.setName("test10");
user.setPassword("123456");
return user;
}

JSON响应特点:​

  • @ResponseBody注解将返回值直接写入响应体
  • Spring MVC自动处理对象到JSON的转换
  • 需要配置相应的消息转换器(如Jackson)

六、对比总结

方式

优点

缺点

适用场景

ModelAndView

灵活,可传数据

代码稍显繁琐

传统Spring MVC项目

原生Servlet API

灵活性极高

代码繁琐,耦合度高

需要精细控制请求响应的场景

Spring MVC简化方式

代码简洁,优雅

功能相对受限

大多数Spring MVC项目

@ResponseBody

JSON处理方便

需要配置转换器

RESTful API开发

七、最佳实践建议

  1. 优先使用Spring MVC方式​:代码更简洁,更易于维护
  2. RESTful API使用@ResponseBody​:结合@RestController注解更佳
  3. 避免过度使用原生Servlet API​:除非有特殊需求,否则尽量使用Spring MVC提供的高级特性
  4. 保持一致性​:在项目中保持统一的风格

结语

通过本文的学习,相信大家对Spring MVC的各种请求处理方式有了更深入的理解。从原生Servlet API到Spring MVC的高级特性,我们可以看到框架的演进带来的便利性。

记住:选择合适的处理方式,可以让你的代码更加优雅和高效!​

http://www.hskmm.com/?act=detail&tid=28164

相关文章:

  • foobar2000 v2.25.2 汉化版
  • 比特币地址投毒攻击深度剖析
  • 为什么大家都爱用微擎?这几点真的太香了
  • 【JS逆向百例】某坤行 1101,雪球 1038,新 acw_sc__v2 逆向分析
  • JAVA 的模板方法模式解析
  • 《构建之法-现代软件工程》 -阅读和提问作业1
  • 计算机视觉与AI在人体成分分析中的技术突破
  • 2024-网鼎杯web-PyBlockly
  • 关于微信小程序申请地理位置接口申请
  • c++学习总结
  • 2025 年大闸蟹蟹卡 / 大闸蟹礼盒 / 大闸蟹礼券 / 好蟹汇大闸蟹选择指南:生态养殖与全国服务双保障解析
  • 分享一个超级耐玩的游戏 转载 植物大战僵尸融合版最新版(v3.0.1)支持安卓版+PC电脑版
  • 【Go 语言神器】iota 到底是什么?为什么高手都爱用它?
  • 2025 年模具生产厂家最新推荐榜单:聚焦优质源头企业,助力工程采购精准选型框格梁模具/框格梁模板/混泥土模具厂家推荐
  • 2025 年最新推荐仿石漆厂家实力厂家口碑排行榜:精选优质环保外墙内墙涂料企业权威揭晓
  • oracle查询存储过程和函数中是否包含某个字符串
  • Qoder 负责人揭秘:Qoder 产品背后的思考与未来发展
  • 2025 年半导体晶片生产厂家最新推荐榜单:专利技术与规模化供货能力双维度深度解析
  • 2025 年水产养殖降氨氮亚盐厂家最新推荐排行榜 ,助力北方对虾鱼塘螃蟹池塘养殖户轻松选购优质产品
  • CS:APP学习笔记之程序的机器级表示(三) - Invinc
  • EHOME视频平台EasyCVR构建全协议、全场景融合的视频监控中枢
  • GA/T 1400视图库平台EasyCVR平台GB28181与1400级联方式全解析
  • 2025 年玻璃钢水箱生产厂家最新推荐榜单:含 30 吨 / 订做 / 消防 / 方形 / 拼装式 / 屋顶 / 大型产品,从产能与服务双维度精选优质企业
  • linux 修改本地时区
  • crontab 定时执行python脚本失败,但手动执行却成功问题处理 - hello-*
  • 2025 年不锈钢水箱厂家最新推荐榜:优质厂家实力对比与选购指南,助您选到适配设备矩形/屋顶/定做方形不锈钢水箱厂家推荐
  • 实用指南:Java 后端面试技术文档(参考)
  • 2025 年钢结构厂家最新推荐榜:优质企业全面解析,助力客户精准选择可靠合作伙伴
  • SQL server 关于“DATEDIFF() ”日期差值计算函数的用法
  • 2025 年清洗机厂家最新推荐:高压清洗机 / 超声波清洗机 / 管道清洗机等多类型设备品牌榜单,助力企业精准选购优质产品