SpringMVC框架:基础万字详解

发布时间:2024年01月22日

目录

一. Spring MVC简介

1. 什么是Spring MVC

2. Spring MVC的特点

3. Spring MVC 与 Spring 的关系

二. Spring MVC的基本组件

1. 控制器(Controller)

1.1 控制器的作用

1.2 控制器的种类

?2. 视图(View)

2.1 视图的作用

2.2 视图的种类

3. 模型(Model)

3.1 模型的作用

3.2 模型数据的传递方式

4. 详解

4.1?控制器(Controller)的设计与实现

4.2?模型(Model)的构建与传递

4.3?视图(View)的渲染与定制

三. Spring MVC的请求处理流程

1.主要处理流程

2. 主要组件

四、Spring MVC 的高级开发

1. 数据回显

2. 参数绑定集合

3. JSON 交互

4. Validation 校验

5. 请求对象和响应对象

6. 注解处理器(Annotation Processor)

五、Spring MVC 的注解开发

1. @Controller

2. @RequestMapping

3. @PathVariable

4. @RequestParam

5. @ModelAttribute

6. @ResponseBody

六. 请求参数的处理

1?URL路径参数

2. 查询参数

3. 表单参数

4. 请求体参数(JSON、XML等)

七.? 数据验证与绑定

1. 数据验证的注解

2. 数据绑定的方式


一. Spring MVC简介

1. 什么是Spring MVC

Spring MVC是Spring框架中的一个模块,用于构建基于Java的Web应用程序。它实现了经典的MVC(Model-View-Controller)设计模式,将应用程序划分为三个主要组件:

- Model(模型):代表应用程序的业务逻辑和数据。通常包含数据模型和业务逻辑的实现。
??
- View(视图):负责用户界面的呈现和展示。通常是用户界面的设计和展示部分。

- Controller(控制器):处理用户请求,协调模型和视图的交互。接收用户输入,调用模型处理业务逻辑,并最终选择适当的视图来呈现结果。

Spring MVC通过这种分层架构实现了模块化和松耦合,提高了代码的可维护性和可扩展性。

2. Spring MVC的特点

1. 松散耦合:
Spring MVC采用了松散耦合的设计,通过依赖注入和接口抽象,使得各个组件之间的关系更加独立,易于维护和测试。

2. 可扩展性:
Spring MVC提供了许多扩展点,如拦截器、处理器适配器等,可以方便地定制和扩展框架的功能,适应不同的业务需求。

3. 灵活的视图解析:
Spring MVC支持多种视图解析器,包括JSP、Thymeleaf等,开发者可以根据项目需求选择合适的视图技术,提高了灵活性。

4. 强大的数据绑定:
Spring MVC支持将请求参数自动绑定到方法的参数上,进行类型转换和数据校验,简化了数据处理的流程。

5. 注解支持:
引入了注解支持,通过在控制器和其他组件上使用注解,简化了配置,提高了代码的可读性和开发效率。

3. Spring MVC 与 Spring 的关系

Spring MVC是Spring框架的一部分,与Spring框架的其他模块(如IoC容器、事务管理等)协同工作,为Web应用程序提供完整的解决方案。具体关系体现在:

- IoC容器的整合:
? Spring MVC控制器(Controller)通常由Spring IoC容器管理,通过IoC容器实现了控制反转(IoC)。

- AOP的应用:
? Spring MVC利用Spring框架的AOP(Aspect-Oriented Programming)特性,可以在方法执行前后织入横切关注点,例如日志、事务等。

- 事务管理:
? Spring MVC可以利用Spring框架提供的事务管理机制,确保在处理请求时可以进行事务的适当管理。

总体而言,Spring MVC作为Spring框架的Web模块,与其他Spring模块协同工作,提供了一个全面的、一致性的Java企业级应用程序开发框架。

二. Spring MVC的基本组件

1. 控制器(Controller)

1.1 控制器的作用

在Spring MVC中,控制器(Controller)是处理用户请求并决定返回什么视图的组件。控制器负责协调应用程序的业务逻辑,接收用户的输入(请求),处理这些输入,然后返回适当的视图。

控制器的主要作用包括:

- 接收用户请求,解析请求参数。
- 调用业务逻辑(模型)进行处理。
- 根据业务处理结果,选择合适的视图进行展示。
- 将模型数据传递给视图。

1.2 控制器的种类

在Spring MVC中,有两种主要的控制器实现方式:注解式控制器和XML配置控制器。

1. 注解式控制器

注解式控制器使用注解标记控制器类和方法,通过Spring的组件扫描机制自动发现和注册控制器。主要的注解有 `@Controller`、`@RequestMapping` 等。

@Controller
@RequestMapping("/example")
public class ExampleController {

? ? @GetMapping("/page")
? ? public String examplePage(Model model) {
? ? ? ? // 处理业务逻辑并返回视图
? ? ? ? model.addAttribute("message", "Hello, Spring MVC!");
? ? ? ? return "examplePage";
? ? }
}

在上面的例子中,`@Controller` 标识了这是一个控制器类,`@RequestMapping` 定义了控制器的基本请求路径,而 `@GetMapping` 定义了处理GET请求的方法。

?2. XML配置控制器

XML配置控制器是通过XML配置文件进行控制器的配置和映射,不使用注解。在配置文件中指定控制器类和方法与请求路径的映射关系。

<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

? ? <bean id="exampleController" class="com.example.ExampleController">
? ? ? ? <property name="urlMappings">
? ? ? ? ? ? <map>
? ? ? ? ? ? ? ? <entry key="/example/page" value="examplePage"/>
? ? ? ? ? ? </map>
? ? ? ? </property>
? ? </bean>
</beans>
public class ExampleController {

? ? private Map<String, String> urlMappings;

? ? public void setUrlMappings(Map<String, String> urlMappings) {
? ? ? ? this.urlMappings = urlMappings;
? ? }

? ? public String handleRequest(String url) {
? ? ? ? // 处理业务逻辑并返回视图
? ? ? ? return urlMappings.get(url);
? ? }
}

在XML配置控制器的例子中,`ExampleController` 类的 `urlMappings` 属性定义了请求路径与处理方法的映射。

选择使用哪种方式取决于项目的需求和开发者的喜好。注解式控制器通常更为简洁,而XML配置控制器则更灵活。

?2. 视图(View)

2.1 视图的作用

视图(View)是用户界面的呈现部分,负责展示模型中的数据给用户。在Spring MVC中,视图负责将处理结果呈现为HTML、JSON等格式,供用户浏览器渲染显示。

视图的主要作用包括:

- 接收控制器传递过来的模型数据。
- 使用模型数据渲染页面或生成响应内容。
- 将生成的页面或响应返回给用户浏览器。

2.2 视图的种类

在Spring MVC中,有多种视图解析器(View Resolver)可以选择,每种都对应不同的视图技术。以下是一些常见的视图种类:

1. JSP(JavaServer Pages)

JSP是一种在Java服务器上编写动态网页的技术。在Spring MVC中,可以使用JSP作为视图,通过`InternalResourceViewResolver`视图解析器来解析JSP视图。

<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

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

上述配置指定了JSP文件的存放位置和后缀,例如,控制器返回 "examplePage",那么对应的JSP文件路径为 "/WEB-INF/views/examplePage.jsp"。

2. Thymeleaf

Thymeleaf是一种现代的、与HTML兼容的服务器端Java模板引擎。它在Spring MVC中被广泛使用,通过`ThymeleafViewResolver`视图解析器来解析Thymeleaf视图。

<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

? ? <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
? ? ? ? <property name="templateEngine" ref="templateEngine" />
? ? ? ? <property name="characterEncoding" value="UTF-8" />
? ? </bean>

? ? <bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
? ? ? ? <property name="templateResolver" ref="templateResolver" />
? ? </bean>

? ? <bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
? ? ? ? <property name="prefix" value="/WEB-INF/templates/" />
? ? ? ? <property name="suffix" value=".html" />
? ? ? ? <property name="templateMode" value="HTML" />
? ? </bean>
</beans>

上述配置指定了Thymeleaf模板文件的存放位置和后缀,例如,控制器返回 "examplePage",对应的Thymeleaf模板文件路径为 "/WEB-INF/templates/examplePage.html"。

这里只介绍了两种视图,实际上Spring MVC还支持其他视图技术,如FreeMarker、Velocity等,开发者可以根据项目需求选择合适的视图解析器。

3. 模型(Model)

3.1 模型的作用

在Spring MVC中,模型(Model)代表了应用程序的业务逻辑和数据。模型的主要作用是保存和管理数据,以便在控制器和视图之间传递。模型起到了协调控制器和视图的桥梁作用,使得数据的传递更加灵活。

3.2 模型数据的传递方式

Spring MVC提供了多种方式来传递模型数据给视图,使得控制器能够向视图提供业务数据。以下是常见的模型数据传递方式:

1. ModelAndView

`ModelAndView` 是Spring MVC中用于封装视图和模型数据的类。通过`ModelAndView`,可以同时设置视图的名称和模型数据,然后返回`ModelAndView`对象。

@GetMapping("/example")
public ModelAndView exampleHandler() {
? ? ModelAndView modelAndView = new ModelAndView();
? ? modelAndView.setViewName("examplePage");
? ? modelAndView.addObject("message", "Hello, Spring MVC!");
? ? return modelAndView;
}

2. Model 和 ModelMap

`Model` 和 `ModelMap` 是Spring MVC中用于存储模型数据的接口和类。它们可以作为控制器方法的参数,用于添加模型数据。

@GetMapping("/example")
public String exampleHandler(Model model) {
? ? model.addAttribute("message", "Hello, Spring MVC!");
? ? return "examplePage";
}

3. @ModelAttribute 注解

`@ModelAttribute` 注解可以用于方法参数或方法上,用于将方法的返回值或方法参数添加到模型中。这种方式常用于在多个请求之间共享模型数据。

@ModelAttribute("commonData")
public List<String> commonData() {
? ? // 返回共享的模型数据
? ? return Arrays.asList("Data1", "Data2", "Data3");
}

@GetMapping("/example")
public String exampleHandler(Model model) {
? ? // 控制器方法中添加其他模型数据
? ? model.addAttribute("message", "Hello, Spring MVC!");
? ? return "examplePage";
}

通过以上方式,控制器可以向视图传递各种类型的模型数据,包括基本类型、对象、集合等。在视图中,可以通过表达式或指定的名称访问这些模型数据,实现数据的呈现和展示。

4. 详解

4.1?控制器(Controller)的设计与实现

1. 控制器的设计

控制器负责接收用户请求,调用业务逻辑处理数据,并决定返回哪个视图。设计控制器时,需要考虑以下方面:

- **请求映射:?使用`@RequestMapping`等注解定义控制器方法与请求路径的映射关系。
??
- 方法设计:?控制器方法应该处理特定的请求,并根据业务逻辑返回相应的结果。方法参数可以包括请求参数、路径变量等。

- 异常处理:?可以使用`@ExceptionHandler`注解处理控制器方法中发生的异常,实现全局或局部的异常处理。

2. 控制器的实现

@Controller
@RequestMapping("/example")
public class ExampleController {

? ? @GetMapping("/page")
? ? public String examplePage(Model model) {
? ? ? ? // 处理业务逻辑
? ? ? ? String message = "Hello, Spring MVC!";
? ? ? ??
? ? ? ? // 将数据添加到模型
? ? ? ? model.addAttribute("message", message);

? ? ? ? // 返回视图名
? ? ? ? return "examplePage";
? ? }

? ? @PostMapping("/submit")
? ? public String submitForm(@RequestParam String userInput, Model model) {
? ? ? ? // 处理表单提交逻辑
? ? ? ? String resultMessage = "You submitted: " + userInput;
? ? ? ? model.addAttribute("resultMessage", resultMessage);

? ? ? ? // 返回结果页面
? ? ? ? return "resultPage";
? ? }

? ? @ExceptionHandler(Exception.class)
? ? public String handleException(Exception ex, Model model) {
? ? ? ? // 异常处理逻辑
? ? ? ? model.addAttribute("error", ex.getMessage());
? ? ? ? return "errorPage";
? ? }
}

上述例子中,`ExampleController` 包含两个控制器方法,分别处理GET请求和POST请求。`@RequestMapping`注解定义了控制器的基本路径。控制器方法使用`Model`对象将数据传递给视图。

4.2?模型(Model)的构建与传递

1. 模型的构建

模型(Model)可以是任何Java对象,负责保存和管理数据。在Spring MVC中,模型通常是一个POJO(Plain Old Java Object)。

public class ExampleModel {
? ? private String data;

? ? // Getter and Setter
}

2?模型的传递

控制器方法可以通过方法参数将模型数据传递给视图。使用`Model`或`ModelMap`对象添加模型数据,并在视图中通过表达式或指定名称访问。

@Controller
@RequestMapping("/example")
public class ExampleController {

? ? @GetMapping("/page")
? ? public String examplePage(Model model) {
? ? ? ? // 构建模型数据
? ? ? ? ExampleModel exampleModel = new ExampleModel();
? ? ? ? exampleModel.setData("Hello from ExampleModel!");

? ? ? ? // 将模型数据添加到Model
? ? ? ? model.addAttribute("exampleModel", exampleModel);

? ? ? ? // 返回视图名
? ? ? ? return "examplePage";
? ? }
}

4.3?视图(View)的渲染与定制

1. 视图的渲染

Spring MVC通过视图解析器(View Resolver)将逻辑视图名解析为实际的视图对象,最终渲染到客户端。以下是Thymeleaf视图的配置示例:

<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
? ? <property name="templateEngine" ref="templateEngine" />
</bean>

<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
? ? <property name="templateResolver" ref="templateResolver" />
</bean>

<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
? ? <property name="prefix" value="/WEB-INF/templates/" />
? ? <property name="suffix" value=".html" />
? ? <property name="templateMode" value="HTML" />
</bean>

2. 视图的定制

可以通过视图解析器的配置定制视图的解析和渲染行为。例如,配置InternalResourceViewResolver用于解析JSP视图:

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

定制Thymeleaf视图解析器:

<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
? ? <property name="templateEngine" ref="templateEngine" />
? ? <property name="characterEncoding" value="UTF-8" />
</bean>

<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
? ? <property name="templateResolver" ref="templateResolver" />
</bean>

<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
? ? <property name="prefix" value="/WEB-INF/templates/" />
? ? <property name="suffix" value=".html" />
? ? <property name="templateMode" value="HTML" />
</bean>

通过这些配置,可以实现对视图的灵活控制

三. Spring MVC的请求处理流程

1.主要处理流程

1. 客户端发送请求:
? ?- 用户在浏览器中输入URL或点击链接,触发HTTP请求的发送。

2. HTTP请求到达服务器:
? ?- 请求首先到达Web服务器,等待被处理。

3. DispatcherServlet的接收:
? ?- 请求被前置的`DispatcherServlet`接收,它是Spring MVC的核心组件之一。

4.*请求分发:
? ?- `DispatcherServlet`根据请求的URL,调用`HandlerMapping`来确定请求的处理器(Controller)。

5. 处理器映射器确定处理器:
? ?- `HandlerMapping`负责映射请求的URL到具体的处理器,选择合适的Controller来处理请求。

6. 处理器适配器调用处理器:
? ?- `HandlerAdapter`负责调用选择的处理器,不同类型的处理器可能使用不同的适配器。

7. 处理器执行:
? ?- 选定的处理器执行相应的业务逻辑,可能包括数据处理、业务计算等。

8. 模型数据准备:
? ?- 处理器执行后,生成模型数据,可以通过`Model`对象传递给视图。

9. 视图解析器解析视图:
? ?- `ViewResolver`根据逻辑视图名解析出真正的视图对象,即确定了如何呈现模型数据的视图。

10. 视图渲染:
? ?- 被解析的视图负责渲染模型数据,生成HTML或其他响应内容。

11. 响应返回给客户端:
? ?- `DispatcherServlet`将最终的响应返回给客户端浏览器。

整个过程中,Spring MVC的各个组件协同工作,负责处理请求、调用业务逻辑、准备模型数据以及渲染视图。理解这个流程对于开发者来说是关键的,因为它允许定制和扩展不同的阶段,以适应特定的需求。

2. 主要组件

Spring MVC是一个基于Java的Web框架,它的各个组件协同工作,实现了灵活的请求处理和响应机制。以下是Spring MVC的主要组件的详细介绍:

1. DispatcherServlet(前端控制器):
? ?- 作用:是Spring MVC的核心组件,负责接收客户端的HTTP请求,协调整个请求处理流程。
? ?- 初始化:在容器启动时进行初始化,加载配置信息,包括`HandlerMapping`、`HandlerAdapter`、`ViewResolver`等。
? ?- 分发请求:根据请求的URL,调用`HandlerMapping`来确定请求的处理器(Controller)。
? ?- 处理器调用:?通过`HandlerAdapter`选择合适的处理器适配器,负责调用具体的处理器执行业务逻辑。

2. HandlerMapping(处理器映射器):
? ?- 作用:负责根据请求的URL映射到具体的处理器(Controller)。
? ?- 默认实现:默认使用`RequestMappingHandlerMapping`,基于注解或XML配置进行请求映射。

3. HandlerAdapter(处理器适配器):
? ?- 作用:负责调用选择的处理器,是处理器与框架其他组件之间的适配器。
? ?- 选择适配器:不同类型的处理器可能使用不同的适配器,如注解式、XML配置式等。

4. Controller(处理器):
? ?- 作用:处理业务逻辑,接收客户端请求,进行处理,并产生模型数据。
? ?- 注解方式:使用`@Controller`注解标识类,可以使用`@RequestMapping`等注解进行请求映射。

5. Model(模型):
? ?- 作用:代表应用程序的业务逻辑和数据,保存和管理数据,以便在控制器和视图之间传递。
? ?- 传递方式:控制器可以通过方法参数将模型数据传递给视图,如`Model`、`ModelMap`、`ModelAndView`等。

6. ViewResolver(视图解析器):
? ?- 作用:解析逻辑视图名,将其解析为真正的视图对象,用于渲染模型数据。
? ?- 配置方式:可以配置多个视图解析器,按照配置的顺序依次尝试解析。

7. View(视图):?
? ?- 作用:负责将模型数据渲染为HTML或其他响应内容,最终返回给客户端浏览器。
? ?- 类型:可以是JSP、Thymeleaf、FreeMarker等不同类型的视图。

8. Interceptors(拦截器):
? ?- 作用:在处理器执行前后进行拦截,用于执行横切关注点,如日志记录、权限验证等。
? ?- 配置方式:可以通过配置拦截器链来指定拦截器的顺序和条件。

9. Exception Resolvers(异常处理器):
? ?- 作用:处理控制器方法中抛出的异常,提供定制的异常处理逻辑。
? ?- 配置方式:可以通过配置异常解析器链来指定异常处理器的顺序和条件。

10. Data Binding and Validation(数据绑定与校验):
? ? - 作用:将请求参数与模型数据进行绑定,确保数据的有效性。
? ? - 注解方式:使用`@RequestParam`、`@ModelAttribute`等注解实现数据绑定。

11. Handler Interceptor Chain(拦截器链):
? ? - 作用:配置多个拦截器,按照配置的顺序依次执行,可以对请求进行前置和后置处理。
? ? - 配置方式:在XML或Java配置中指定拦截器链。

12. Handler Exception Resolver Chain(异常处理器链):
? ? - 作用:配置多个异常处理器,按照配置的顺序依次执行,处理控制器方法中抛出的异常。
? ? - 配置方式:在XML或Java配置中指定异常处理器链。

这些组件共同协作,构成了Spring MVC的请求处理流程。通过适当的配置,开发者可以根据项目需求定制每个组件的行为,实现灵活、可扩展的Web应用程序。

四、Spring MVC 的高级开发

1. 数据回显

- 概述:
? - 数据回显是在页面重新渲染时将之前提交的数据重新显示在表单上,通常用于编辑页面。

- 实现方式:
? - 在Controller方法中使用`@ModelAttribute`注解或`Model`对象将需要回显的数据传递给视图。
? - 在JSP等视图页面中使用EL表达式`${}`来获取回显的数据。

2. 参数绑定集合

- 概述:
? - 处理请求中的集合参数,如List、Map等。

- 实现方式:
? - 在Controller方法的参数中使用`@RequestParam`、`@ModelAttribute`等注解,Spring MVC会自动将请求中的参数绑定到集合对象。

3. JSON 交互

- 概述:
? - 支持通过JSON格式进行请求和响应,适用于前后端分离的应用。

- 实现方式:
? - 使用`@RequestBody`注解将JSON请求体转换为Java对象。
? - 使用`@ResponseBody`注解将Java对象转换为JSON响应体。

4. Validation 校验

- 概述:
? - 数据校验是确保请求参数的有效性,防止无效数据进入系统。

- 实现方式:
? - 使用`javax.validation`中的注解(如`@NotNull`、`@Size`)标注在实体类字段上。
? - 在Controller方法参数中使用`@Valid`注解或`BindingResult`对象进行校验。

5. 请求对象和响应对象

- 概述:
? - 定义自定义的请求对象和响应对象,用于封装请求参数和返回结果。

- 实现方式:
? - 创建Java类作为请求对象,使用注解(如`@RequestBody`)进行参数绑定。
? - 创建Java类作为响应对象,使用`@ResponseBody`注解将其转换为JSON格式。

6. 注解处理器(Annotation Processor)

- 概述:
? - 使用自定义的注解,通过注解处理器进行处理,实现更灵活的请求处理逻辑。

- 实现方式:
? - 创建自定义注解,并编写处理器来处理这个注解。
? - 注解处理器可以在请求处理前、中、后进行相应的处理,实现更细粒度的控制。

以上高级开发技术可以使Spring MVC应用更具弹性和扩展性,适应不同的业务需求。合理运用这些技术,可以提高开发效率并使系统更具健壮性。

五、Spring MVC 的注解开发

1. @Controller

- 作用:
? - 标识一个类是Spring MVC中的Controller。

- 示例:

? @Controller
? public class MyController {
? ? ? // Controller 方法和业务逻辑
? }

2. @RequestMapping

- 作用:
? - 映射请求的URL到相应的Controller方法。

- 示例:

? @Controller
? @RequestMapping("/example")
? public class ExampleController {
? ? ? @RequestMapping("/page")
? ? ? public String examplePage() {
? ? ? ? ? // Controller 方法的业务逻辑
? ? ? ? ? return "examplePage";
? ? ? }
? }

3. @PathVariable

- 作用:
? - 用于从请求的URL中提取参数。

- 示例:

? @Controller
? @RequestMapping("/example")
? public class ExampleController {
? ? ? @RequestMapping("/user/{userId}")
? ? ? public String getUser(@PathVariable Long userId, Model model) {
? ? ? ? ? // 使用PathVariable提取URL中的参数
? ? ? ? ? // 业务逻辑处理
? ? ? ? ? return "userPage";
? ? ? }
? }

4. @RequestParam

- 作用:
? - 用于从请求参数中提取值。

- 示例:

? @Controller
? @RequestMapping("/example")
? public class ExampleController {
? ? ? @RequestMapping("/user")
? ? ? public String getUser(@RequestParam String username, Model model) {
? ? ? ? ? // 使用RequestParam提取请求参数
? ? ? ? ? // 业务逻辑处理
? ? ? ? ? return "userPage";
? ? ? }
? }

5. @ModelAttribute

- 作用:
? - 用于将方法的返回值或方法参数绑定到模型中。

- 示例:

? @Controller
? @RequestMapping("/example")
? public class ExampleController {
? ? ? @ModelAttribute("userInfo")
? ? ? public UserInfo getUserInfo() {
? ? ? ? ? // 从数据库或其他地方获取用户信息
? ? ? ? ? return userInfo;
? ? ? }

? ? ? @RequestMapping("/user")
? ? ? public String getUser(@ModelAttribute("userInfo") UserInfo userInfo, Model model) {
? ? ? ? ? // 使用ModelAttribute将userInfo添加到模型中
? ? ? ? ? // 业务逻辑处理
? ? ? ? ? return "userPage";
? ? ? }
? }

6. @ResponseBody

- 作用:
? - 将方法的返回值直接写入HTTP响应体中,而不是渲染视图。

- 示例:

? @Controller
? @RequestMapping("/example")
? public class ExampleController {
? ? ? @RequestMapping("/data")
? ? ? @ResponseBody
? ? ? public String getData() {
? ? ? ? ? // 返回字符串作为响应
? ? ? ? ? return "Some data";
? ? ? }
? }

这些注解使得Spring MVC的开发更加简洁和灵活,通过合理使用这些注解,开发者能够快速构建强大的Web应用。

六. 请求参数的处理

1?URL路径参数

1. 什么是URL路径参数:
? ?- URL路径参数是通过URL路径中的占位符来传递的参数,通常用于RESTful风格的请求。

2. 如何在Spring MVC中获取URL路径参数:
? ?- 使用`@PathVariable`注解来绑定URL中的占位符到方法的参数上。

3. 示例代码演示:

 ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {
? ? ? ?@RequestMapping("/user/{userId}")
? ? ? ?public String getUser(@PathVariable Long userId, Model model) {
? ? ? ? ? ?// 处理用户ID
? ? ? ? ? ?return "userPage";
? ? ? ?}
? ?}

2. 查询参数

1. 什么是查询参数:
? ?- 查询参数是通过URL中的查询字符串传递的参数,通常以`?`开始,参数名和参数值之间使用`&`连接。

2. 如何在Spring MVC中获取查询参数:
? ?- 使用`@RequestParam`注解来绑定请求参数到方法的参数上。

3. 示例代码演示:

? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {
? ? ? ?@RequestMapping("/user")
? ? ? ?public String getUser(@RequestParam String username, Model model) {
? ? ? ? ? ?// 处理用户名
? ? ? ? ? ?return "userPage";
? ? ? ?}
? ?}

3. 表单参数

1. 什么是表单参数:
? ?- 表单参数是通过HTML表单提交的参数,通常使用POST请求。

2. 如何在Spring MVC中获取表单参数:
? ?- 使用`@RequestParam`注解或直接在方法参数中声明一个JavaBean,Spring MVC会自动进行数据绑定。

3. 示例代码演示:

? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {
? ? ? ?@RequestMapping(value = "/submitForm", method = RequestMethod.POST)
? ? ? ?public String submitForm(@RequestParam String username, @RequestParam String password, Model model) {
? ? ? ? ? ?// 处理表单参数
? ? ? ? ? ?return "resultPage";
? ? ? ?}
? ?}

4. 请求体参数(JSON、XML等)

1. 什么是请求体参数:
? ?- 请求体参数是通过HTTP请求体传递的参数,通常用于传递JSON、XML等格式的数据。

2. 如何在Spring MVC中获取请求体参数:
? ?- 使用`@RequestBody`注解来将请求体中的数据绑定到方法参数上。

3. 示例代码演示:

? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {
? ? ? ?@RequestMapping(value = "/jsonData", method = RequestMethod.POST)
? ? ? ?@ResponseBody
? ? ? ?public String handleJsonData(@RequestBody Map<String, Object> jsonData) {
? ? ? ? ? ?// 处理JSON格式的请求体参数
? ? ? ? ? ?return "success";
? ? ? ?}
? ?}

这些方式使得Spring MVC能够灵活处理不同类型的请求参数,从而满足各种场景下的需求。

七.? 数据验证与绑定

1. 数据验证的注解

1. 数据验证的概述:
? ?- 数据验证是确保请求参数的有效性,防止无效数据进入系统。

2. 数据验证的注解:
? ?- 使用`javax.validation`中的注解对实体类字段进行标注,常见的注解包括:
? ? ?- `@NotNull`: 验证字段不能为null。
? ? ?- `@Size(min, max)`: 验证字段的长度在min和max之间。
? ? ?- `@Pattern(regexp)`: 验证字段符合正则表达式的模式。3. 示例代码演示:

? ?public class User {
? ? ? ?@NotNull
? ? ? ?private String username;

? ? ? ?@Size(min = 6, max = 12)
? ? ? ?private String password;

? ? ? ?// 其他字段及getter/setter方法
? ?}

2. 数据绑定的方式

1. 数据绑定的概述:
? ?- 数据绑定是将请求参数与Java对象进行绑定,确保数据的有效传递和处理。

2. 数据绑定的方式:
? ?- 使用`@RequestParam`、`@ModelAttribute`等注解在Controller方法的参数上进行数据绑定。
? ?- 在方法参数中使用`@Valid`注解或`BindingResult`对象进行数据校验。

3. 示例代码演示:

? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {
? ? ? ?@RequestMapping("/submitForm")
? ? ? ?public String submitForm(@Valid @ModelAttribute("user") User user, BindingResult result, Model model) {
? ? ? ? ? ?if (result.hasErrors()) {
? ? ? ? ? ? ? ?// 数据校验失败,处理错误
? ? ? ? ? ? ? ?return "errorPage";
? ? ? ? ? ?}
? ? ? ? ? ?// 处理绑定的用户对象
? ? ? ? ? ?return "successPage";
? ? ? ?}
? ?}
文章来源:https://blog.csdn.net/qq_35763697/article/details/135735297
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。