返回

SpringMVC教程进阶:视图与模型拆分、重定向与转发、RequestMapping注解、URL模式匹配与传参

后端

SpringMVC 教程进阶:视图与模型拆分、重定向与转发、RequestMapping 注解、URL 模式匹配与传参

前言

本教程将为大家对 SpringMVC 核心技术进行详细介绍,包括视图与模型拆分、重定向与转发、RequestMapping 注解、URL 模式匹配与传参,帮助您深入掌握 SpringMVC 的开发技巧,助力您的 Java Web 开发。

视图与模型拆分

视图与模型拆分是一种将视图逻辑和模型逻辑分离的设计模式,有助于提高代码的可维护性和可重用性。在 SpringMVC 中,视图负责显示数据,而模型负责处理数据。

视图

视图负责显示数据,可以是 JSP、HTML、JSON 等多种格式。在 SpringMVC 中,视图通常是通过 @RequestMapping 注解来映射到控制器方法的。

模型

模型负责处理数据,可以是 JavaBean、Map、List 等多种格式。在 SpringMVC 中,模型通常是通过 @ModelAttribute 注解来映射到控制器方法的参数。

视图与模型拆分的好处

视图与模型拆分的好处包括:

  • 提高代码的可维护性和可重用性。
  • 提高代码的可读性和可理解性。
  • 方便进行单元测试。

重定向与转发

重定向和转发都是用于在服务器端跳转页面的两种技术,但它们之间存在着一些差异。

重定向

重定向是通过向客户端发送一个新的 HTTP 请求来实现页面跳转的。当客户端收到重定向请求后,它会向新的 URL 发起请求,从而实现页面跳转。重定向的特点是:

  • 会产生两次 HTTP 请求。
  • 会改变浏览器的 URL。
  • 可以携带参数。

转发

转发是通过服务器内部跳转来实现页面跳转的。当服务器收到转发请求后,它会直接将请求转发到新的 URL,而不会向客户端发送新的 HTTP 请求。转发的特点是:

  • 只会产生一次 HTTP 请求。
  • 不会改变浏览器的 URL。
  • 不能携带参数。

重定向与转发对比

特征 重定向 转发
HTTP 请求次数 2 次 1 次
改变浏览器 URL
可以携带参数

RequestMapping 注解

@RequestMapping 注解用于将请求映射到控制器方法。它可以放在类上或方法上。当放在类上时,它表示该类中的所有方法都映射到相同的 URL 路径。当放在方法上时,它表示该方法映射到指定的 URL 路径。

@RequestMapping("/user")
public class UserController {

    @RequestMapping("/list")
    public String list() {
        // ...
    }

    @RequestMapping("/add")
    public String add() {
        // ...
    }
}

RequestMapping 注解的属性

@RequestMapping 注解的属性包括:

  • value:用于指定请求映射的 URL 路径。
  • method:用于指定请求的 HTTP 方法,如 GETPOSTPUTDELETE 等。
  • params:用于指定请求参数的名称和值。
  • headers:用于指定请求头部的名称和值。

URL 模式匹配

SpringMVC 使用 Ant 风格的 URL 模式来进行 URL 路径匹配。Ant 风格的 URL 模式使用 *? 通配符来匹配任意数量的字符和单个字符。

通配符
* 匹配任意数量的字符。
? 匹配单个字符。

例如,以下 URL 模式可以匹配 /user/list/user/add/user/update 等 URL 路径:

/user/*

以下 URL 模式可以匹配 /user/1/user/2/user/3 等 URL 路径:

/user/?

传参

SpringMVC 支持通过以下方式向控制器方法传递参数:

  • 请求参数:通过 @RequestParam 注解来映射请求参数到控制器方法的参数。
  • 路径变量:通过 @PathVariable 注解来映射路径变量到控制器方法的参数。
  • 请求头:通过 @RequestHeader 注解来映射请求头到控制器方法的参数。
  • 请求体:通过 @RequestBody 注解来映射请求体到控制器方法的参数。
@RequestMapping("/user/{id}")
public String get(@PathVariable("id") Long id) {
    // ...
}

@RequestMapping("/user/add")
public String add(@RequestParam("name") String name, @RequestParam("age") Integer age) {
    // ...
}

@RequestMapping("/user/update")
public String update(@RequestBody User user) {
    // ...
}

总结

本教程为大家详细介绍了 SpringMVC 的核心技术,包括视图与模型拆分、重定向与转发、RequestMapping 注解、URL 模式匹配与传参。希望通过本教程,您能够深入掌握 SpringMVC 的开发技巧,助力您的 Java Web 开发。