简单介绍一下
Spring MVC是一种基于Java的Web开发框架,用于开发灵活、高效的MVC(Model-View-Controller)架构的Web应用程序。它是Spring框架的一部分,通过提供一组功能强大的类和注解,可以简化Web应用程序的开发过程。
Spring MVC的核心思想是将应用程序的逻辑分成三个层:模型层(Model)、视图层(View)和控制层(Controller)。这使得开发人员可以更好地管理代码,提高代码的可维护性和可测试性。
在Spring MVC中,控制器负责处理用户请求,并根据请求调用相应的服务业务逻辑,然后将结果返回给视图层进行显示。视图层负责展示数据,并与用户进行交互。模型层则负责处理数据的获取和存储。
使用Spring MVC时,开发人员可以通过配置文件或注解来定义路由映射、请求参数绑定、验证规则等。它还提供了许多功能强大的特性,如国际化支持、文件上传、异常处理等,帮助开发人员更加轻松地构建高性能的Web应用程序。
总之,Spring MVC是一种功能强大、灵活易用的Java Web开发框架,它可以帮助开发人员快速构建高性能、可扩展的Web应用程序。
来看看常用的注解
@Controller
@Controller注解通常与@RequestMapping注解一起使用,用来指定处理请求的URL路径。@RequestMapping
@RequestMapping注解是一个用于映射URL路径的注解。它可以用在控制器类上或方法上,用于指定处理请求的URL路径和HTTP请求方法。@GetMapping
@GetMapping注解是一个用于标识一个方法为HTTP GET请求的注解。它可以被应用在控制器类和方法上。
@GetMapping注解有以下属性:- value:指定请求的URL路径。
- params:指定请求必须包含的参数及其值。
- headers:指定请求必须包含的头部信息及其值。
- consumes:指定处理请求的Content-Type。
- produces:指定返回结果的Content-Type。
@PostMapping
@GetMapping注解是一个用于标识一个方法为HTTP POST请求的注解。它可以被应用在控制器类和方法上。@PutMapping
@PutMapping用于将HTTP PUT请求映射到相应的处理方法上。它可以用在类级别或方法级别。
可以通过@PathVariable、@RequestParam、@RequestBody等注解来获取HTTP请求中的参数,并将其传递给处理方法。@DeleteMapping
@DeleteMapping注解是Spring Framework中的一个注解,用于将HTTP DELETE请求映射到特定的方法上。
使用@DeleteMapping注解可以方便地定义RESTful风格的API接口。它可以与@RequestMapping注解一起使用,并指定特定的URL路径,以及可选的请求参数、请求头等条件。@PathVariable
@PathVariable用于从URL路径中提取变量值,并将其绑定到方法参数上。
使用@PathVariable注解的方式如下:- 在控制器方法的参数列表中声明一个带有@PathVariable注解的参数。
- 在@PathVariable注解中指定要提取的变量名,该变量名应与URL路径中的变量名相匹配。
- 当请求到达控制器方法时,Spring MVC会自动将URL路径中对应的变量值传递给带有@PathVariable注解的参数。
@RequestParam
@RequestParam用于将请求参数绑定到方法的参数上。
使用@RequestParam注解可以将HTTP请求中的请求参数与方法的参数进行绑定。它有以下几个常用的属性:- value:指定请求参数的名称,可以通过该属性来指定请求参数的名称。
- required:指定该参数是否为必需的,默认为true,表示该参数必须传递,如果未传递则会抛出异常;设置为false时,表示该参数可以不传递。
- defaultValue:指定该参数的默认值,在请求参数未传递时使用默认值。
@RequestBody
@RequestBody用于指定方法参数应该从HTTP请求的主体中获取。
在Spring MVC中,@RequestBody注解可以用于处理POST请求的请求体。它可以将请求体的内容绑定到方法参数上,并将其转换为对应的Java对象。
需要注意的是,@RequestBody注解只能用于POST请求,并且请求体必须是有效的JSON格式数据。如果请求体不是有效的JSON格式,或者请求的Content-Type与@RequestBody注解指定的参数类型不匹配,那么会导致请求失败。@ResponseBody
@ResponseBody用于标记某个方法返回的结果直接作为HTTP响应体的内容,而不是视图名或模型对象。当使用@ResponseBody注解时,Spring会自动将方法返回的对象转化为JSON、XML等格式的数据,并通过HTTP响应发送给客户端。
通常情况下,Spring MVC框架会根据方法的返回值类型来决定如何处理返回结果:如果方法返回的是字符串类型,Spring会将其作为视图名进行解析;如果方法返回的是Java对象,Spring会将其作为模型对象返回给视图进行渲染。但是当使用@ResponseBody注解时,无论方法返回的是什么类型的数据,都会被作为HTTP响应的内容发送给客户端,而不会经过视图解析器进行处理。
使用@ResponseBody注解可以实现将任意类型的数据直接返回给客户端,通常用于开发RESTful风格的API接口。在方法上添加@ResponseBody注解后,可以省略掉使用@RestController注解,因为@ResponseBody已经包含了@RestController的功能。@ModelAttribute
@ModelAttribute用于将请求参数绑定到控制器方法的参数上。当一个控制器方法被调用时,@ModelAttribute注解会根据请求参数的名称和控制器方法的参数类型来自动匹配并绑定请求参数。
使用@ModelAttribute注解可以实现以下功能:
数据绑定:通过将请求参数与控制器方法的参数进行绑定,可以将请求参数的值传递给控制器方法进行处理。
表单回显:当使用表单提交数据时,可以使用@ModelAttribute注解将表单数据绑定到控制器方法的参数上,并在页面渲染时将参数的值回显到页面上。
模型属性传递:当需要在多个控制器方法之间共享数据时,可以使用@ModelAttribute注解将数据设置为模型属性,该属性将会自动添加到请求的模型中,从而可以在不同的控制器方法中访问该数据。
@SessionAttribute
@SessionAttribute是一用于将指定的属性存储在会话中。当使用@ModelAttribute注解时,Spring会先尝试从会话中查找与@SessionAttribute注解相匹配的属性,如果找到则将其赋值给对应的参数或方法参数,否则会创建一个新的实例并存储在会话中。
使用@SessionAttribute注解时,需要在控制器类上添加@SessionAttributes注解,以指定哪些属性需要存储在会话中。
请注意,在使用@SessionAttribute注解时,要确保在每个请求处理方法结束后,通过调用SessionStatus的setComplete()方法来清除会话中存储的属性。这可以避免潜在的会话泄漏和不一致。
@InitBinder
@InitBinder它用于初始化WebDataBinder对象。
在Spring MVC中,WebDataBinder对象用于将请求参数绑定到Controller方法的参数上。通过使用@InitBinder注解,我们可以指定一个方法在每次请求之前被调用,用来自定义WebDataBinder对象的初始化行为。
使用@InitBinder注解时,需要创建一个带有@InitBinder注解的方法,并传入一个WebDataBinder参数。在这个方法中,我们可以对WebDataBinder对象进行一些自定义操作,比如设置格式化器、校验器等。
@InitBinder注解只能用于标注非静态、无返回值且带有一个WebDataBinder参数的方法。这个方法将在每次请求之前被调用,用于初始化WebDataBinder对象。
@ExceptionHandler
@ExceptionHandler 注解是一个用于处理异常注解。
在 Spring MVC 中,我们可以使用 @ExceptionHandler 注解来处理控制器中抛出的特定类型的异常。当控制器方法抛出被 @ExceptionHandler 注解标记的异常时,Spring 将会自动调用带有 @ExceptionHandler 注解的方法来处理该异常。
@ExceptionHandler 注解可以应用于整个控制器类或特定的控制器方法上。如果应用于控制器类上,则表示该类中的所有控制器方法都将采用相同的异常处理逻辑。如果应用于控制器方法上,则表示该方法将具有特定的异常处理逻辑。
使用 @ExceptionHandler 注解时,需要指定要处理的异常类型。可以通过多次使用 @ExceptionHandler 注解来处理多个不同的异常类型。
在使用 @ExceptionHandler 注解处理异常时,还可以通过方法参数传递异常信息。例如,可以将 HttpServletRequest 或 HttpServletResponse 对象作为方法参数,以便在处理异常时获取相关的请求或响应信息。