当前位置: 首页 > 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.zskr.cn/news/18323.html

相关文章:

  • 比特币地址投毒攻击深度剖析
  • 【JS逆向百例】某坤行 1101,雪球 1038,新 acw_sc__v2 逆向分析
  • 关于微信小程序申请地理位置接口申请
  • c++学习总结
  • 2025 年大闸蟹蟹卡 / 大闸蟹礼盒 / 大闸蟹礼券 / 好蟹汇大闸蟹选择指南:生态养殖与全国服务双保障解析
  • 【Go 语言神器】iota 到底是什么?为什么高手都爱用它?
  • 2025 年模具生产厂家最新推荐榜单:聚焦优质源头企业,助力工程采购精准选型框格梁模具/框格梁模板/混泥土模具厂家推荐
  • 2025 年最新推荐仿石漆厂家实力厂家口碑排行榜:精选优质环保外墙内墙涂料企业权威揭晓
  • oracle查询存储过程和函数中是否包含某个字符串
  • 2025 年半导体晶片生产厂家最新推荐榜单:专利技术与规模化供货能力双维度深度解析
  • GA/T 1400视图库平台EasyCVR平台GB28181与1400级联方式全解析
  • linux 修改本地时区
  • 深入解析:RabbitMQ:在Linux上安装RabbitMQ
  • 2025 年清洗机厂家最新推荐:高压清洗机 / 超声波清洗机 / 管道清洗机等多类型设备品牌榜单,助力企业精准选购优质产品
  • AI元人文决策范式的思维逻辑演进研究
  • 2025 最新屏蔽泵厂家推荐排行榜揭晓!实力企业深度解析与选购指南,助企业精准选型
  • (JDK,Eclipse,Tomcat版本)Java的web配备Part1 (#by 拌面
  • (数论大杂烩)古代猪文
  • 滥用ACL权限覆盖其他用户S3存储桶中的文件/视频
  • 2025 年净化工程服务商最新权威推荐排行榜:医院净化工程 / 制药厂 / 化工厂 / 实验室 / 无尘车间优选净化工程设计安装施工公司
  • “100 W、18 GHz 一口通吃——HL-SMAMF-100-18-20 衰减器小砖块实测记”
  • KingView 组态王 6.5下载地址与安装教程
  • 基于传递矩阵法计算多层结构声表面波声速 - 教程
  • linux执行脚本命令报错$\r:未找到命令的解决方法
  • go使用root用户进行调试
  • iOS 26 系统流畅度深度剖析,Liquid Glass 视效与界面滑动的实际测评 - 指南
  • coze手册
  • 小程序分包
  • 20232319 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • gitlab配置aws的s3作为docker镜像的存储