深入理解SpringMVC:数据处理、文件上传与异常处理等常见技术应用及解决方案

devtools/2025/2/4 8:00:46/

目录

前言

第一章:数据处理与跳转

1. 结果跳转方式

2. 使用 @ResponseBody 返回 JSON 数据

3. 配置静态资源不被拦截

第二章:SpringMVC 实现文件上传

1. 导入文件上传的依赖

2. 配置文件上传解析器

3. 文件上传示例

第三章:SpringMVC 的异常处理

1. 异常处理思路

2. 局部异常处理

3. 全局异常处理


前言

        SpringMVC 是一种非常流行的 Web 应用框架,广泛用于构建基于 Java 的 Web 应用程序。在这篇博客中,我们将详细讲解 SpringMVC 中的几种常见技术应用及解决方案,包括页面跳转、响应 JSON 数据、文件上传、异常处理等。

第一章:数据处理与跳转

1. 结果跳转方式

在 SpringMVC 中,我们有多种方式来处理页面跳转,下面介绍几种常见的方式。

① 使用 ModelAndView 对象跳转

通过 ModelAndView 对象可以将数据和视图绑定,然后返回给客户端。下面是一个简单的例子:

@Controller
public class UserController {@RequestMapping("/save3")public ModelAndView save3() {System.out.println("执行了...");ModelAndView mv = new ModelAndView();mv.addObject("msg", "用户名或者密码已经存在");mv.setViewName("suc");return mv;}
}

这里我们通过 mv.addObject() 向视图传递数据,然后通过 mv.setViewName() 设置跳转的视图。

② 使用 Servlet API 跳转

除了通过 SpringMVC 的方式跳转外,我们还可以直接使用原生的 Servlet API 来进行页面跳转。常用的跳转方式有输出响应、重定向和转发。

@Controller
@RequestMapping("/role")
public class RoleController {@RequestMapping("/t1")public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException {rsp.getWriter().println("Hello,Spring BY servlet API");}@RequestMapping("/t2")public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException {rsp.sendRedirect("/SpringMVCDemo/html/suc.html");}@RequestMapping("/t3")public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception {req.setAttribute("msg", "hello");req.getRequestDispatcher("/html/suc.html").forward(req, rsp);}
}
③ 使用 SpringMVC 的跳转方式

SpringMVC 也提供了更为简洁的方式来进行页面的跳转,主要通过返回 String 类型的视图名。

@Controller
@RequestMapping("/role")
public class RoleController {@RequestMapping("/t1")public String test1() {return "/html/suc.html"; // 简单的页面跳转}@RequestMapping("/t2")public String test2() {return "forward:/html/suc.html"; // 转发}@RequestMapping("/t3")public String test3() {return "redirect:/html/suc.html"; // 重定向}
}

2. 使用 @ResponseBody 返回 JSON 数据

如果要返回 JSON 数据,可以使用 @ResponseBody 注解,该注解会自动将返回对象转换为 JSON 格式。

配置 jackson 依赖

首先需要引入 jackson 依赖库来支持对象和 JSON 之间的转换:

<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-core</artifactId><version>2.9.0</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version>
</dependency>
示例代码
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/save6")public @ResponseBody User save6(User user) {System.out.println(user);user.setUsername("hello");user.setAge(100);return user;}
}

在前端,您可以使用 AJAX 进行异步请求并处理 JSON 响应:

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>$(function(){$("#btn").click(function(){$.ajax({type: "post",url: "/SpringMVCDemo/user/save6",data: {username: "haha", age: "20"},success: function(d) {alert(d.username + " ‐ " + d.age);}});});});
</script>

3. 配置静态资源不被拦截

SpringMVC 的 DispatcherServlet 会拦截所有请求,导致静态资源(如图片、CSS、JS)也被拦截。为了解决这个问题,我们可以配置静态资源路径,使其不被 DispatcherServlet 拦截。

<mvc:resources mapping="/css/**" location="/css/"/> <!-- 样式 -->
<mvc:resources mapping="/images/**" location="/images/"/> <!-- 图片 -->
<mvc:resources mapping="/js/**" location="/js/"/> <!-- JavaScript -->

第二章:SpringMVC 实现文件上传

1. 导入文件上传的依赖

为了支持文件上传,需要添加 commons-fileuploadcommons-io 依赖:

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version>
</dependency>
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version>
</dependency>

2. 配置文件上传解析器

SpringMVC 配置文件中配置 CommonsMultipartResolver 来处理文件上传。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="8388608" /> <!-- 最大文件上传大小 8MB -->
</bean>

3. 文件上传示例

在 Controller 中处理文件上传:

@Controller
@RequestMapping("/file")
public class FileController {@RequestMapping(value = "/upload", method = RequestMethod.POST)@ResponseBodypublic String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {String rootPath = request.getSession().getServletContext().getRealPath("WEB-INF/upload");String originalFileName = file.getOriginalFilename();File newFile = new File(rootPath + File.separator + originalFileName);if (!newFile.getParentFile().exists()) {newFile.getParentFile().mkdirs();}file.transferTo(newFile);return "{\"data\":\"success\"}";}
}

第三章:SpringMVC 的异常处理

1. 异常处理思路

SpringMVC 中的异常处理分为两种方式:

  1. 局部异常处理:在 Controller 中捕获异常并处理。
  2. 全局异常处理:使用 HandlerExceptionResolver 统一处理异常。

2. 局部异常处理

@RequestMapping("/findAll")
public String findAll(Model model) {try {int a = 10 / 0;  // 模拟异常} catch (Exception e) {model.addAttribute("errorMsg", "系统正在维护,请联系管理员");return "404";}return "suc";
}

404 页面如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>错误提示页面</title>
</head>
<body>
<h1>404 <b th:text="${errorMsg}"></b></h1>
</body>
</html>

3. 全局异常处理

为了实现全局异常处理,可以自定义异常类和异常处理器。

自定义异常类
public class SysException extends Exception {private String message;public SysException(String message) {this.message = message;}@Overridepublic String getMessage() {return message;}@Overridepublic String toString() {return "SysException{" + "message='" + message + '\'' + '}';}
}
自定义异常处理器
public class SysExceptionResolver implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {SysException exception = (ex instanceof SysException) ? (SysException) ex : new SysException("系统正在维护,请联系管理员");ModelAndView mv = new ModelAndView();mv.addObject("errorMsg", exception.getMessage());mv.setViewName("404");return mv;}
}

配置异常处理器:

<bean id="sysExceptionResolver" class="com.qcby.conf.SysExceptionResolver" />

结语

        SpringMVC 提供了灵活的页面跳转、数据交互、文件上传以及异常处理机制,可以帮助开发者轻松处理常见的 Web 开发问题。在开发过程中,理解并熟练应用这些基本功能,能够让你更高效地开发出稳定且功能丰富的 Web 应用。


http://www.ppmy.cn/devtools/155949.html

相关文章

小程序-模板与配置

前言 1. 数据绑定 定义数据 使用数据 然后我们把info渲染到页面上 1.1 绑定内容 这就是动态绑定内容 1.2 绑定属性 vue中绑定属性要用v&#xff0c;这个就不用了 绑定内容和属性都是Mustache语法 这样就不会变形了&#xff0c;因为宽度不变&#xff0c;高度变 1.3 三元运…

全面剖析 XXE 漏洞:从原理到修复

目录 前言 XXE 漏洞概念 漏洞原理 XML 介绍 XML 结构语言以及语法 XML 结构 XML 语法规则 XML 实体引用 漏洞存在原因 产生条件 经典案例介绍分析 XXE 漏洞修复方案 结语 前言 网络安全领域暗藏危机&#xff0c;各类漏洞威胁着系统与数据安全。XXE 漏洞虽不常见&a…

EF Core与ASP.NET Core的集成

目录 分层项目中EF Core的用法 数据库的配置 数据库迁移 步骤汇总 注意&#xff1a; 批量注册上下文 分层项目中EF Core的用法 创建一个.NET类库项目BooksEFCore&#xff0c;放实体等类。NuGet&#xff1a;Microsoft.EntityFrameworkCore.RelationalBooksEFCore中增加实…

在CentOS服务器上部署DeepSeek R1

在CentOS服务器上部署DeepSeek R1,并通过公网IP与其进行对话,可以按照以下步骤操作: 一、环境准备 系统要求: CentOS 8+(需支持AVX512指令集)。 硬件配置: GPU版本:NVIDIA驱动520+,CUDA 11.8+。 CPU版本:至少16核处理器,64GB内存。 存储空间:原始模型需要30GB,量…

【JAVA篇】------ spring aop

文章目录 AOP&#xff08;面向切面编程&#xff09;前言一、AOP的概念二、AOP的核心概念三、AOP在Java中的应用场景1. 整体介绍2. 静态代理模式3. 动态代理模式&#xff08;JDK动态代理&#xff09; 总结 AOP&#xff08;面向切面编程&#xff09; &#x1f4ac;欢迎交流&#…

Deep Crossing:深度交叉网络在推荐系统中的应用

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 在机器学习和深度学习领域&#xff0c;特征工程一直是一个关键步骤&#xff0c;尤其是对于大规模的推荐系统和广告点击率预…

无人机图传模块 wfb-ng openipc-fpv,4G

openipc 的定位是为各种模块提供底层的驱动和linux最小系统&#xff0c;openipc 是采用buildroot系统编译而成&#xff0c;因此二次开发能力有点麻烦。为啥openipc 会用于无人机图传呢&#xff1f;因为openipc可以将现有的网络摄像头ip-camera模块直接利用起来&#xff0c;从而…

【大数据技术】教程01:搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell)

搭建完全分布式高可用大数据集群&#xff08;VMwareCentOSFinalShell&#xff09; 资源下载 VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.isoFinalShell 4.5.12 注&#xff1a;请在阅读本篇文章前&#xff0c;将以上资源下载下来。 写在前面 本章主要介…