Spring MVC

1.Spring MVC框架概念介绍

Spring MVC框架: Spring MVC是Spring Framework的一部分,用于构建基于Java的Web应用程序。它提供了一种轻量级、灵活且可扩展的方式来开发Web应用程序。Spring MVC框架主要关注于分离应用程序的不同层次,并提供了设计模式和现代Web开发的最佳实践。

MVC设计模式: MVC是一种软件设计模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。每个组件都具有不同的职责,可以独立开发和测试,从而提高了代码的可维护性、可扩展性和可重用性。

以下是MVC设计模式中各个组件的职责:

  1. 模型(Model):

    • 模型表示应用程序的数据和业务逻辑。
    • 它负责处理数据的读取、存储和验证。
    • 模型通常包含POJO(Plain Old Java Object)或实体类,以及与数据相关的操作。
  2. 视图(View):

    • 视图负责展示模型中的数据给用户。
    • 它通常是用户界面的一部分,如HTML页面、JSP页面、Thymeleaf模板等。
    • 视图不包含业务逻辑,只负责呈现数据。
  3. 控制器(Controller):

    • 控制器接收用户的请求,并根据请求执行相应的操作。
    • 它处理用户输入并决定使用哪个模型和视图来响应请求。
    • 控制器通过协调模型和视图之间的交互来实现业务流程。

MVC设计模式的优势包括:

  • 分离关注点:将各个组件的职责明确分离,使代码更加模块化,易于维护和测试。
  • 可重用性:可以通过使用相同的模型和视图来支持多个控制器,提高了代码的可重用性。
  • 灵活性:可以独立扩展和修改模型、视图和控制器,而不影响其他组件。

Spring MVC框架借鉴了MVC设计模式的思想,并提供了一个基于注解和配置的方式来实现MVC架构。它通过DispatcherServlet作为前端控制器,将请求分发给相应的控制器处理,并将结果返回给视图进行展示。

2.Spring MVC 步骤

  1. 创建一个Maven项目。

    • 使用Maven创建一个新的项目结构。
  2. 在项目的pom.xml文件中添加Spring MVC依赖。

    • <dependencies>标签内,添加Spring MVC相关的依赖。例如:
    <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency>

    这将引入Spring MVC所需的基本库。

  3. 创建Spring MVC配置文件。

    • src/main/resources目录下创建一个spring-mvc.xml文件(命名可以根据自己的喜好进行调整)。
    • 在配置文件中配置Spring MVC相关的组件,如处理器映射器、视图解析器等。
  4. 创建控制器。

    • 创建一个带有@Controller注解的类,其中包含处理HTTP请求的方法。
    • 使用@RequestMapping注解来映射请求的URL和HTTP方法到对应的处理方法。
  5. 创建视图文件。

    • 根据需要,创建JSP、Thymeleaf模板或其他类型的视图文件,用于呈现最终的响应结果。
  6. 运行应用程序。

    • 配置任何必要的服务器(如Tomcat)并将应用程序部署到服务器上。
    • 在浏览器中访问应用程序的URL,触发请求处理流程。

3.Spring MVC体系架构

Spring MVC的核心框架结构是基于DispatcherServlet。下面是Spring MVC请求处理流程的简要概述:

  1. 客户端发送请求:

    • 客户端通过URL向服务器发送HTTP请求,例如http://example.com/products.
  2. DispatcherServlet拦截请求:

    • DispatcherServlet是Spring MVC的前端控制器,它拦截所有的请求,并协调整个请求处理流程。
  3. 处理器映射器(Handler Mapping)确定处理器:

    • DispatcherServlet将请求传递给处理器映射器。
    • 处理器映射器根据配置或注解的规则,决定将请求映射到哪个控制器的处理方法上。
  4. 控制器处理请求:

    • 控制器(Controller)是一个被映射的处理器,它会执行与请求对应的处理方法。
    • 控制器处理请求时可以进行业务逻辑的处理、调用服务层方法等操作。
  5. 控制器返回ModelAndView:

    • 控制器处理方法的返回值通常是一个ModelAndView对象,其中包含了处理结果和视图信息。
  6. 视图解析器(View Resolver)解析视图:

    • 视图解析器将控制器方法返回的逻辑视图名称解析为实际的视图对象。
    • 视图解析器根据配置或规则将逻辑视图名转换为JSP、Thymeleaf模板或其他视图类型。
  7. 视图渲染:

    • 解析后的视图对象将被用来进行视图渲染,将模型数据填充到视图中生成最终的HTML、JSON等响应。
  8. 响应返回给客户端:

    • 经过视图渲染后,DispatcherServlet将最终的响应返回给客户端。

在整个请求处理流程中,DispatcherServlet起到了核心的作用。它负责协调各个组件的工作,如处理器映射器、控制器、视图解析器和视图渲染等,以完成请求的处理和响应的生成。

需要注意的是,以上流程只是简要概述了Spring MVC的主要处理步骤。实际应用中,可能还会涉及到拦截器、数据绑定、数据验证、异常处理等其他环节。

4.基于注解的控制器

1.在Spring MVC中,@Controller@RequestMapping注解以及@GetMapping@PostMapping@DeleteMapping注解和<mvc:annotation-driven/>配置一起用于实现Controller和View之间的映射关系。

  1. @Controller注解:

    • @Controller注解用于将一个类标记为控制器类,用于处理HTTP请求。
    • 通过在Controller类上添加@Controller注解,Spring会自动将该类注册为一个控制器Bean,并在请求到达时调用相应的处理方法。
  2. @RequestMapping注解:

    • @RequestMapping注解用于映射请求的URL和HTTP方法到对应的处理方法。
    • 可以将@RequestMapping注解应用到Controller类和方法上,指定相应的URL路径和HTTP方法。
    • 例如,使用@RequestMapping("/home")标记在Controller类上,表示所有以"/home"开头的请求都将交给该控制器处理。
    • 在处理方法上使用@RequestMapping注解,可以进一步细化请求映射。
  3. HTTP方法注解(如@GetMapping@PostMapping@DeleteMapping):

    • 这些注解是@RequestMapping注解的衍生注解,用于细化HTTP方法的映射。
    • @GetMapping用于将HTTP GET请求映射到相应的处理方法。
    • @PostMapping用于将HTTP POST请求映射到相应的处理方法。
    • @DeleteMapping用于将HTTP DELETE请求映射到相应的处理方法。
    • 通过使用这些注解,可以更加明确地定义处理特定HTTP方法的请求。
  4. <mvc:annotation-driven/>配置:

    • <mvc:annotation-driven/>是Spring MVC XML配置文件中的一个配置元素。
    • 它用于启用基于注解的Spring MVC功能,包括自动注册控制器Bean、请求映射、类型转换、数据校验等。
    • 在配置文件中添加<mvc:annotation-driven/>,Spring MVC会自动扫描带有@Controller和其他相关注解的类,并将它们注册为控制器。

结合使用上述注解和配置,你可以实现Controller和View之间的映射关系,将不同的HTTP请求映射到对应的处理方法上,从而实现对应的业务逻辑并返回相应的视图结果。

2.Spring MVC中,可以使用不同的注解来处理Servlet API入参,包括@RequestParam@ModelAttribute

  1. @RequestParam注解:

    • @RequestParam注解用于从请求参数中获取值,并将其绑定到方法的参数上。
    • 可以使用name属性指定请求参数的名称,如果不指定,默认使用方法参数的名称。
    • 通过value属性可以设置参数的别名。
    • 使用required属性指定该参数是否是必需的,默认为true,如果请求中没有相应的参数会抛出异常。可以设置为false,当请求中没有参数时会给参数赋予默认值(如null)。
    • 通过defaultValue属性可以设置参数的默认值,在请求中没有相应参数时使用该默认值。
  2. @ModelAttribute注解:

    • @ModelAttribute注解用于将请求参数绑定到一个实体对象上。
    • 可以通过在方法的参数上添加@ModelAttribute注解,并指定对象的属性名称,让Spring MVC自动将请求参数绑定到对象的对应属性上。
    • 如果没有指定name属性,则默认使用参数的类型名称作为属性名称。
    • 当请求参数较多时,使用@ModelAttribute注解可以更方便地将参数组织到一个对象中,实现参数的批量绑定。

使用这些注解,你可以很方便地处理请求中的参数并进行相应的数据绑定。例如,使用@RequestParam获取单个参数,使用@ModelAttribute将参数绑定到对象上。

3.在Spring MVC中,ModelAndView用于处理控制器方法的出参。它可以同时包含模型数据和视图信息,用于向视图传递数据并选择要呈现的视图。

以下是使用ModelAndView进行出参处理的示例:

  1. 创建ModelAndView对象:

    ModelAndView modelAndView = new ModelAndView();
  2. 设置模型数据:

    modelAndView.addObject("key", value);

    可以使用addObject方法向模型中添加数据。"key"是属性的名称,value是对应的值。可以多次调用addObject方法来添加多个属性。

  3. 设置视图名称:

    modelAndView.setViewName("viewName");

    使用setViewName方法设置要呈现的视图的名称。这里的"viewName"可以是逻辑视图名(如"home")或者物理视图的路径(如"WEB-INF/views/home.jsp")。

  4. 返回ModelAndView对象: 控制器方法的返回值为ModelAndView对象,Spring MVC会根据其中包含的模型数据和视图信息来进行相应的处理。

在视图中,可以使用${key}表达式来访问模型中的数据,${key}会被实际的值替代。

示例代码如下所示:

@RequestMapping("/example")

public ModelAndView example() {

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("name", "Alice");

modelAndView.setViewName("exampleView");

return modelAndView;

}

在上述示例中,模型中添加了一个名为"name"的属性,值为"Alice"。视图名称设置为"exampleView"。最终,返回的ModelAndView对象将被解析为对应的视图,并向视图传递模型数据。

Spring MVC中,除了使用ModelAndView进行出参处理之外,还可以使用ModelMap对象来传递数据到视图。

  1. 使用Model对象: Model对象是一个接口,可以在控制器方法的参数列表中声明它,并使用它来添加模型数据。示例如下:

    @RequestMapping("/example") public String example(Model model) { model.addAttribute("name", "Alice"); return "exampleView"; }

    在上述示例中,Model对象的addAttribute方法用于添加名为"name"的属性,值为"Alice"。返回的字符串"exampleView"表示该方法要呈现的视图。

  2. 使用Map对象: Map对象是Model接口的子接口,也可以在控制器方法的参数列表中声明它,并使用它来添加模型数据。示例如下:

    @RequestMapping("/example") public String example(Map<String, Object> map) { map.put("name", "Alice"); return "exampleView"; }

    在上述示例中,Map对象的put方法用于将名为"name"的属性和值"Alice"添加到模型中。返回的字符串"exampleView"表示该方法要呈现的视图。

无论是使用Model还是Map对象,最终返回的字符串都表示要呈现的视图的名称。

在视图中,可以使用${name}表达式来访问模型中的数据,${name}会被实际的值替代。

这些方法都可以用于将模型数据传递给视图,可以根据自己的需求选择使用哪种方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值