欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Spring MVC 框架学习笔记:从入门到精通的实战指南

Spring MVC 框架学习笔记:从入门到精通的实战指南

2025/2/23 18:03:26 来源:https://blog.csdn.net/m0_72686196/article/details/145794097  浏览:    关键词:Spring MVC 框架学习笔记:从入门到精通的实战指南

目录

1. Spring MVC 概述

2. Spring MVC 项目搭建

3. Spring MVC 执行流程

4. Spring MVC @RequestMapping 注解

5. Spring MVC 获取请求参数

6. Spring MVC 常见注解

7. Spring MVC 响应处理

8. Spring MVC SSM 整合

9. Spring MVC 作用域传参

10. Spring MVC 上传

11. Spring MVC 下载

12. Spring MVC 拦截器

13. Spring MVC 异常处理

14. Spring MVC 其他注解

总结


前言

在 Java Web 开发领域,Spring MVC 框架无疑是众多开发者的选择之一。它基于 Spring 框架,提供了强大的 MVC 架构支持,帮助开发者构建高性能、可维护的 Web 应用程序。本文将按照清晰的目录结构,带你深入了解 Spring MVC 的核心概念、功能特性以及实战应用。

1. Spring MVC 概述

Spring MVC 是 Spring 框架的一部分,专门用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型、视图和控制器三个部分,从而实现代码的高内聚和低耦合。

2. Spring MVC 项目搭建

搭建一个 Spring MVC 项目需要以下步骤:

  1. 创建 Maven 项目 :在 IDE 中创建一个新的 Maven 项目,并添加 Spring MVC 的依赖。

xml

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.10</version>
</dependency>
  1. 配置前端控制器 :在 web.xml 文件中配置 DispatcherServlet,作为前端控制器。

xml

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
  1. 配置视图解析器 :在 Spring 配置文件中配置视图解析器,指定视图文件的前缀和后缀。

xml

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/>
</bean>

3. Spring MVC 执行流程

Spring MVC 的执行流程如下:

  1. 用户发送请求 :用户通过浏览器发送 HTTP 请求到服务器。

  2. 前端控制器接收请求DispatcherServlet 接收到请求,并将其分发到合适的处理器。

  3. 处理器映射器查找处理器HandlerMapping 查找与请求匹配的处理器(Controller)。

  4. 处理器适配器调用处理器HandlerAdapter 调用处理器方法,并返回 ModelAndView 对象。

  5. 视图解析器解析视图ViewResolver 将视图名称解析为实际的视图对象。

  6. 视图渲染 :视图对象使用模型数据进行渲染,并将结果返回给用户。

4. Spring MVC @RequestMapping 注解

@RequestMapping 是 Spring MVC 中最常用的注解之一,用于将请求映射到处理器方法上。以下是一个简单的示例:

java

@Controller
public class MyController {@RequestMapping("/hello")public String hello() {return "hello";}
}

5. Spring MVC 获取请求参数

Spring MVC 提供了多种方式获取请求参数,包括:

  • 通过方法参数获取 :直接在方法参数中声明需要的参数名称。

java

@Controller
public class MyController {@RequestMapping("/greet")public String greet(@RequestParam("name") String name, Model model) {model.addAttribute("message", "Hello, " + name + "!");return "greet";}
}
  • 通过 @ModelAttribute 获取 :将请求参数绑定到 Java 对象上。

java

@Controller
public class MyController {@RequestMapping("/user")public String getUser(@ModelAttribute("user") User user, Model model) {model.addAttribute("user", user);return "userDetail";}
}

6. Spring MVC 常见注解

Spring MVC 中常用的注解包括:

  • @Controller :标记一个类为控制器。

  • @RequestMapping :将请求映射到处理器方法上。

  • @RequestParam :获取请求参数。

  • @ModelAttribute :绑定请求参数到 Java 对象。

  • @ResponseBody :将方法返回值直接写入响应体。

7. Spring MVC 响应处理

Spring MVC 支持多种响应处理方式,包括:

  • 返回字符串 :返回视图名称,由视图解析器解析为实际视图。

java

@Controller
public class MyController {@RequestMapping("/hello")public String hello() {return "hello";}
}
  • 返回 ModelAndView :包含模型数据和视图信息。

java

@Controller
public class MyController {@RequestMapping("/hello")public ModelAndView hello() {ModelAndView modelAndView = new ModelAndView("hello");modelAndView.addObject("message", "Hello, Spring MVC!");return modelAndView;}
}
  • 返回 JSON 数据 :通过 @ResponseBody 注解返回 JSON 数据。

java

@Controller
public class MyController {@RequestMapping("/user")@ResponseBodypublic User getUser() {User user = new User("John", 30);return user;}
}

8. Spring MVC SSM 整合

SSM(Spring + Spring MVC + MyBatis)是常见的 Java Web 开发框架组合。整合步骤如下:

  1. 添加依赖 :在 pom.xml 中添加 Spring、Spring MVC 和 MyBatis 的依赖。

  2. 配置数据源 :配置数据库连接信息。

xml

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="root"/>
</bean>
  1. 配置事务管理器 :配置事务管理器,管理数据库事务。

xml

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean>
  1. 配置 MyBatis :配置 MyBatis 的 SqlSessionFactory 和 Mapper。

xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

9. Spring MVC 作用域传参

Spring MVC 支持多种作用域传参,包括:

  • 请求作用域(Request Scope) :默认作用域,参数在请求范围内有效。

  • 会话作用域(Session Scope) :参数在会话范围内有效。

java

@Controller
public class MyController {@RequestMapping("/login")public String login(@RequestParam("username") String username, HttpSession session) {session.setAttribute("user", username);return "home";}
}
  • 应用作用域(Application Scope) :参数在应用范围内有效。

10. Spring MVC 上传

Spring MVC 提供了简单的文件上传功能,通过 @RequestParam 注解获取上传的文件对象。

java

@Controller
public class FileController {@PostMapping("/upload")public String upload(@RequestParam("file") MultipartFile file) {try {file.transferTo(new File("path/to/save/" + file.getOriginalFilename()));} catch (IOException e) {e.printStackTrace();}return "uploadSuccess";}
}

11. Spring MVC 下载

Spring MVC 也支持文件下载功能,通过设置响应头和输出流实现。

java

@Controller
public class FileController {@GetMapping("/download")public void download(HttpServletResponse response) {File file = new File("path/to/download/file.txt");response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=file.txt");try (FileInputStream fis = new FileInputStream(file);OutputStream os = response.getOutputStream()) {byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {os.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();}}
}

12. Spring MVC 拦截器

Spring MVC 支持拦截器,用于在请求处理的不同阶段执行特定逻辑。以下是一个简单的拦截器示例:

java

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("Pre Handle");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("Post Handle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("After Completion");}
}

注册拦截器:

xml

<bean class="org.springframework.web.servlet.HandlerInterceptorAdapter"><property name="interceptors"><list><ref bean="myInterceptor"/></list></property>
</bean>

13. Spring MVC 异常处理

Spring MVC 提供了全局异常处理器,通过 @ControllerAdvice 注解实现。

java

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ModelAndView handleException(Exception e) {ModelAndView modelAndView = new ModelAndView("error");modelAndView.addObject("message", e.getMessage());return modelAndView;}
}

14. Spring MVC 其他注解

Spring MVC 还提供了其他一些有用的注解,如:

  • @InitBinder :用于初始化数据绑定。

java

@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {binder.setFieldDefaultPrefix("user.");}
}
  • @SessionAttributes :用于将模型属性添加到会话中。

java

@Controller
@SessionAttributes("user")
public class MyController {// ...
}

总结

Spring MVC 作为 Spring 框架的重要组成部分,提供了强大的 Web 开发能力。通过学习 Spring MVC 的核心概念和功能特性,结合实战应用,可以快速构建高性能、可维护的 Web 应用程序。希望本文能够帮助你深入理解 Spring MVC 的精髓,为你的开发工作提供有力支持。如果你有任何问题或建议,欢迎在评论区留言,我们一起交流学习!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词