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

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

目录

前言

第一章:数据处理与跳转

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)
    @ResponseBody
    public 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;
    }

    @Override
    public String getMessage() {
        return message;
    }

    @Override
    public String toString() {
        return "SysException{" + "message='" + message + '\'' + '}';
    }
}
自定义异常处理器
public class SysExceptionResolver implements HandlerExceptionResolver {

    @Override
    public 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.kler.cn/a/529407.html

相关文章:

  • Kafka SASL/SCRAM介绍
  • 小程序设计和开发:什么是竞品分析,如何进行竞品分析
  • leetcode 844 比较含退格的字符串
  • C++哈希(链地址法)(二)详解
  • 分层多维度应急管理系统的设计
  • 《苍穹外卖》项目学习记录-Day10订单状态定时处理
  • 第1节课:算法初印象—开启算法世界的大门
  • 【自然语言处理(NLP)】基于Transformer架构的预训练语言模型:BERT 训练之数据集处理、训练代码实现
  • 从TinyZero的数据与源码来理解DeepSeek-R1-Zero的强化学习训练过程
  • HarmonyOS:ArkWeb进程
  • Java代码规范指南
  • AI智慧社区--百度地图
  • LeetCode--347. 前 K 个高频元素/Golang中的堆(container/heap)
  • 课题介绍:基于惯性与单目视觉信息融合的室内微小型飞行器智能自主导航研究
  • ASP.NET Core 异常Filter
  • Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具(专业版)
  • Cypher入门
  • 两栏布局、三栏布局、水平垂直居中
  • docker gitlab arm64 版本安装部署
  • SpringBoot 整合 SpringMVC:配置嵌入式服务器
  • Redis集群理解以及Tendis的优化
  • nginx 报错404
  • 为AI聊天工具添加一个知识系统 之83 详细设计之24 度量空间之1 因果关系和过程:认知金字塔
  • Heptagon 迭代器
  • 【含文档+PPT+源码】基于微信小程序农家乐美食餐厅预约推广系统
  • P_all: 投影矩阵(Projection Matrix)