Spring MVC:从入门到精通

Spring MVC:从入门到精通

2024好事发生

文章链接:https://cloud.tencent.com/developer/article/2472759【了解函数式接口FUNCTION】

作者:用户1737293

评价:深入浅出的讲解了函数式接口,文章段落清晰,从开始的介绍到功能应用非常清楚。结构层次分明,非常不错的一篇文章,推荐给各位需要的同学。

前言Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。

一、Spring MVC概述1.1 什么是Spring MVCSpring MVC是Spring框架提供的一个基于Servlet的Web框架,它实现了MVC设计模式。MVC是一种将应用程序分为三个基本部分的软件架构模式:模型(Model)、视图(View)和控制器(Controller)。

模型(Model):表示应用程序的数据和业务逻辑。视图(View):负责呈现数据的用户界面。控制器(Controller):处理用户的请求并返回模型和视图。Spring MVC通过这三个部分的分离,使得代码更加模块化、易于维护和测试。

1.2 Spring MVC的优点Spring MVC具有以下优点:

松耦合:通过MVC架构,能够将业务逻辑、数据处理和页面展示分离,使得代码更易于维护和测试。灵活性:提供了灵活的配置文件和可扩展的插件,使得开发人员可以根据项目需求进行自定义配置和扩展。高度可定制化:支持多种视图技术(如JSP、Thymeleaf等),可以根据项目需求选择最适合的视图技术。易于集成:可以与其他Spring框架(如Spring Boot、Spring Data等)无缝集成,提供了更丰富的功能和易于维护的代码。强大的请求处理能力:提供了丰富的请求处理功能,如URL映射、数据绑定、表单验证等,能够满足各种复杂的请求处理需求。1.3 Spring MVC的缺点尽管Spring MVC具有许多优点,但它也存在一些缺点:

学习曲线较陡峭:Spring MVC的配置较为复杂,需要深入理解框架的原理和使用方式,对于初学者来说学习曲线较为陡峭。配置繁琐:Spring MVC的配置文件较多,需要编写大量的XML或Java配置代码,使得项目的配置比较繁琐。性能稍低:相比于其他轻量级的框架,Spring MVC的性能稍低,主要是因为Spring MVC采用了反射机制和动态代理,导致一定的性能损耗。依赖较重:Spring MVC依赖于Spring框架,需要引入大量的依赖库和配置文件,使得项目的依赖较重。二、Spring MVC的功能点2.1 控制器(Controller)控制器是Spring MVC的核心组件之一,负责处理用户的请求并返回模型和视图。在Spring MVC中,控制器通常是一个使用@Controller注解标记的类。

代码语言:javascript复制@Controller

public class MyController {

@RequestMapping("/hello")

public String hello() {

return "hello"; // 返回视图名称

}

}在上面的示例中,MyController是一个控制器类,它包含一个处理/hello请求的方法。当请求到达时,该方法会被调用,并返回一个视图名称"hello",该名称会被视图解析器解析为实际的视图对象。

2.2 请求映射(RequestMapping)@RequestMapping注解用于将请求映射到控制器的方法上。它可以指定请求的方法(如GET、POST等)、路径等。

代码语言:javascript复制@Controller

@RequestMapping("/user")

public class UserController {

@GetMapping("/{id}")

public String getUser(@PathVariable("id") Long id, Model model) {

User user = userService.findById(id);

model.addAttribute("user", user);

return "userDetail";

}

@PostMapping

public String createUser(@ModelAttribute User user) {

userService.save(user);

return "redirect:/user/list";

}

}在上面的示例中,UserController是一个处理用户相关请求的控制器类。它包含两个方法:getUser和createUser。getUser方法处理GET请求,并通过@PathVariable注解获取URL中的路径变量id。createUser方法处理POST请求,并通过@ModelAttribute注解将请求参数绑定到User对象上。

2.3 数据绑定(Data Binding)Spring MVC提供了自动数据绑定的功能,可以将请求参数绑定到Java对象上。这大大简化了参数处理的过程。

代码语言:javascript复制@PostMapping("/submit")

public String submitForm(@ModelAttribute("userForm") User user) {

// 处理用户对象

return "result";

}在上面的示例中,submitForm方法通过@ModelAttribute注解将请求参数绑定到User对象上。Spring MVC会自动将请求参数与User对象的属性进行匹配,并将匹配到的值赋给相应的属性。

2.4 视图解析(View Resolution)视图解析器负责将逻辑视图名解析为实际的视图对象。在Spring MVC中,常用的视图解析器有InternalResourceViewResolver、ThymeleafViewResolver等。

代码语言:javascript复制

在上面的XML配置中,InternalResourceViewResolver被配置为视图解析器。它指定了视图文件的前缀和后缀,这样当控制器返回一个视图名称时,视图解析器就可以根据这些配置找到实际的视图文件。

2.5 异常处理(Exception Handling)Spring MVC提供了全局异常处理的功能,可以集中处理控制器中抛出的异常。

代码语言:javascript复制@ControllerAdvice

public class GlobalExceptionHandler {

@ExceptionHandler(value = Exception.class)

public ResponseEntity handleException(Exception e) {

// 处理异常

return new ResponseEntity<>("Error occurred", HttpStatus.INTERNAL_SERVER_ERROR);

}

}在上面的示例中,GlobalExceptionHandler是一个全局异常处理器类。它包含一个处理所有异常的方法handleException。当控制器中抛出异常时,该方法会被调用,并返回一个包含错误信息的响应实体。

三、Spring MVC的背景3.1 MVC模式的发展MVC模式最早由Trygve Reenskaug在1978年提出,用于Smalltalk-80环境。随着Web技术的发展,MVC模式逐渐被引入到Web应用程序的开发中。在Java Web领域,Struts是最早实现MVC模式的框架之一。然而,Struts的配置较为繁琐,且性能较低。因此,Spring框架推出了自己的MVC实现——Spring MVC。

3.2 Spring框架的崛起Spring框架是一个开源的Java/J2EE全功能栈(full-stack)的应用程序框架,它以IoC(控制反转)和AOP(面向切面编程)为核心,提供了全面的编程和配置支持。随着Spring框架的不断发展,它逐渐成为Java企业级应用开发的首选框架。Spring MVC作为Spring框架的一部分,也逐渐得到了广泛的应用。

四、Spring MVC的业务点4.1 用户认证与授权在用户认证与授权方面,Spring MVC可以与Spring Security集成,实现用户认证和授权的功能。

代码语言:javascript复制@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception {

http

.authorizeRequests()

.antMatchers("/admin/**").hasRole("ADMIN")

.anyRequest().authenticated()

.and()

.formLogin()

.loginPage("/login")

.permitAll()

.and()

.logout()

.permitAll();

}

}在上面的示例中,WebSecurityConfig类配置了Spring Security的安全规则。它指定了访问/admin/**路径的用户必须具有ADMIN角色,而其他路径则需要用户进行认证。

4.2 数据访问与操作在数据访问与操作方面,Spring MVC可以与MyBatis、Hibernate等ORM框架集成,实现数据的持久化操作。

代码语言:javascript复制@Service

public class UserService {

@Autowired

private UserMapper userMapper;

public User findById(Long id) {

return userMapper.findById(id);

}

public void save(User user) {

userMapper.insert(user);

}

}在上面的示例中,UserService类是一个服务类,它提供了用户数据的访问和操作功能。它注入了UserMapper接口,该接口通过MyBatis与数据库进行交互。

4.3 文件上传与下载在文件上传与下载方面,Spring MVC提供了简单的处理方式。

代码语言:javascript复制@PostMapping("/upload")

public String uploadFile(@RequestParam("file") MultipartFile file) {

try {

// 保存文件

file.transferTo(new File("path/to/save/" + file.getOriginalFilename()));

} catch (IOException e) {

e.printStackTrace();

}

return "uploadSuccess";

}在上面的示例中,uploadFile方法处理文件上传请求。它通过@RequestParam注解获取上传的文件对象,并将其保存到指定路径下。

五、Spring MVC的底层原理5.1 DispatcherServletDispatcherServlet是Spring MVC的核心组件之一,它负责请求的接收、分发和处理。当请求到达时,DispatcherServlet会根据请求的URL找到对应的控制器方法,并调用该方法处理请求。处理完成后,DispatcherServlet会将返回的视图名解析为实际的视图对象,并将其呈现给用户。

5.2 HandlerMappingHandlerMapping是一个接口,用于将请求映射到相应的控制器。Spring MVC提供了多种实现方式,如RequestMappingHandlerMapping。当请求到达时,DispatcherServlet会调用HandlerMapping来找到对应的控制器方法。

5.3 Controller控制器是处理用户请求的核心部分,它负责处理业务逻辑并返回视图。在Spring MVC中,控制器通常是一个使用@Controller注解标记的类。当请求到达时,DispatcherServlet会调用控制器中的方法来处理请求。

5.4 ModelAndViewModelAndView是用于封装模型和视图的对象。控制器返回一个ModelAndView对象,包含模型数据和视图名。DispatcherServlet会将返回的视图名解析为实际的视图对象,并将其呈现给用户。

5.5 ViewResolver视图解析器负责将逻辑视图名解析为实际的视图对象。在Spring MVC中,常用的视图解析器有InternalResourceViewResolver、ThymeleafViewResolver等。当控制器返回一个视图名时,视图解析器会根据配置找到实际的视图文件,并将其呈现给用户。

六、Spring MVC的应用实践6.1 创建项目首先,我们需要创建一个Maven项目,并添加Spring MVC的依赖。

代码语言:javascript复制

org.springframework

spring-webmvc

5.3.10

javax.servlet

javax.servlet-api

4.0.1

provided

jstl

jstl

1.2

6.2 配置前端控制器在web.xml文件中配置DispatcherServlet作为前端控制器。

代码语言:javascript复制

dispatcher

org.springframework.web.servlet.DispatcherServlet

1

dispatcher

/

6.3 编写Spring MVC配置文件在src/main/resources目录下创建dispatcher-servlet.xml配置文件,用于配置处理器映射信息和视图解析器。

代码语言:javascript复制

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

6.4 创建控制器在src/main/java目录下创建控制器类。

代码语言:javascript复制@Controller

public class MyController {

@RequestMapping("/hello")

public String hello() {

return "hello";

}

}6.5 创建视图页面在WEB-INF/views目录下创建hello.jsp页面。

代码语言:javascript复制<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Hello

Hello, Spring MVC!

6.6 测试启动Tomcat服务器,在浏览器的地址栏输入http://localhost:8080/项目名/hello,向控制器发送请求。浏览器会跳转到hello.jsp页面,并显示“Hello, Spring MVC!”字样。

七、Spring MVC的优缺点分析7.1 优点松耦合:通过MVC架构,能够将业务逻辑、数据处理和页面展示分离,使得代码更易于维护和测试。灵活性:提供了灵活的配置文件和可扩展的插件,使得开发人员可以根据项目需求进行自定义配置和扩展。高度可定制化:支持多种视图技术(如JSP、Thymeleaf等),可以根据项目需求选择最适合的视图技术。易于集成:可以与其他Spring框架(如Spring Boot、Spring Data等)无缝集成,提供了更丰富的功能和易于维护的代码。强大的请求处理能力:提供了丰富的请求处理功能,如URL映射、数据绑定、表单验证等,能够满足各种复杂的请求处理需求。7.2 缺点学习曲线较陡峭:Spring MVC的配置较为复杂,需要深入理解框架的原理和使用方式,对于初学者来说学习曲线较为陡峭。配置繁琐:Spring MVC的配置文件较多,需要编写大量的XML或Java配置代码,使得项目的配置比较繁琐。性能稍低:相比于其他轻量级的框架,Spring MVC的性能稍低,主要是因为Spring MVC采用了反射机制和动态代理,导致一定的性能损耗。依赖较重:Spring MVC依赖于Spring框架,需要引入大量的依赖库和配置文件,使得项目的依赖较重。八、总结Spring MVC是一个功能强大且灵活的Web开发框架,它基于MVC设计模式,通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。尽管Spring MVC具有一些缺点,如学习曲线较陡峭、配置繁琐、性能稍低、依赖较重等,但其优点仍然使得它成为Java企业级应用开发的首选框架之一。通过深入理解Spring MVC的原理和应用实践,我们可以更好地利用它来构建高质量的Web应用程序。

相关推荐

18世界杯德国队的时尚风向标:那些让人印象深刻的球员发型
淮北概述
365bet育在线网址

淮北概述

⌛ 01-09 👁️ 5189
服务器101什么意思
365bet育在线网址

服务器101什么意思

⌛ 06-26 👁️ 3705
【妣】是什么意思、字义及解释
365体育平台靠谱吗

【妣】是什么意思、字义及解释

⌛ 09-07 👁️ 7865
购买 Apple Watch 配件
365bet在线体育投注

购买 Apple Watch 配件

⌛ 02-14 👁️ 9762
MacBook Pro 屏幕黑屏,但是有个鼠标形状的图标和光驱形状的图标
来谈谈vn皮肤
365bet育在线网址

来谈谈vn皮肤

⌛ 12-28 👁️ 7710
为什么手机录不了低频噪音
365bet在线体育投注

为什么手机录不了低频噪音

⌛ 07-08 👁️ 7064
《越狱》第五季回归,迈克尔将如何神奇复活?
365体育平台靠谱吗

《越狱》第五季回归,迈克尔将如何神奇复活?

⌛ 10-05 👁️ 2019