SpringMVC基础Controller

Controller 的编写和配置

@Controller 注解和 @RequestMapping 注解是 Spring MVC 最重要的两个注解。

使用基于注解的控制器的优点如下:

  • 一个 Controller 类可以处理多个动作,而实现了一个 Controller 接口的控制器只能处理一个动作。

  • 基于 Controller 注解的控制器的请求映射不需要写在配置文件中。使用 @RequestMapping 注解类型,可以对一个方法进行请求处理。

1. Controller 注解类型

Spring 使用扫描机制来找到应用程序中所有基于注解的控制器类。为了保证 Spring 能找到你的控制器,必须完成两件事:

// ...
@ComponentScan("...")
public class SpringWebConfig implements WebMvcConfigurer {
    ...
}
  1. 自定义一个配置类,实现 WebMvcConfigurer 接口;

  2. 在配置类上标注,@ComponentScan 扫描你的 @Controller 所在的包。

注意,不要让 Spring 扫描一个太广泛的包,这会包含无意义的行为。

2. @RequestMapping 注解类型

@RequestMapping 注解类型的作用如同起名字所暗示:映射一个请求和一个方法。可以使用它注解一个方法或类。

@RequestMapping 注解的方法将成为一个 请求处理方法 ,在接收到URL请求时被调用。

@RequestMapping(value="/hello", method = {RequestMethod.GET, RequestMethod.POST})
public ModelAndView printHello() {
    System.out.println("Hello World");
    ModelAndView mav = new ModelAndView();
    mav.addObject("message", "Hello Spring MVC Framework!");
    mav.setViewName("hello");
    return mav;
}

value 属性是 @RequestMapping 的默认属性,唯一时可省略属性名。

method 属性用来指示该方法仅处理哪些 HTTP 方法。若 method 属性只有一个值时,则无须花括号。若没有指定 method 属性值,则请求方法可处理任意 HTTP 方法。

此外,如果用 @RequestMapping 注解一个控制器类,那么,所有的方法都将映射为『相对于』类级别的请求。

3. 编写请求方法

每个请求处理方法的参数和返回值『既灵活又严格』。

最为常见的参数类型有:

  • HttpServletRequest、HttpServletResponse、HttpSession

  • Map、Model、ModelMap

  • 表单对象(次常用

  • 带指定注解的参数(最常用

最为常见的返回值类型有:

  • ModelAndView(最常用

  • Model、View

  • String(次常用

  • 被当作 View 的模型对象的任意类型


对于初学者而言,如果你觉得『参数类型和返回值类型过于灵活多样,以至于你无法确定你使用哪个种更合适』,那么你就使用 HttpServletRequestHttpServletResponseModelAndView ,这是 100% 不会有问题的百搭组合。当然,使用过程中代码会略显罗嗦。

@RequestMapping("...")
public ModelAndView demo(HttpServletRequest request, HttpServletResponse response) {
    ...
}

4. 请求参数和路径变量

Spring MVC 提供了一个更简单的方法来获取 Get 请求参数:通过使用 @RequestParam 注解。

@RequestMapping("/hehe/{id}")
public ModelAndView printGoodbye(@PathVariable int id) {
    System.out.println(id);
    ModelAndView mav = new ModelAndView();
    mav.setViewName("hello");
    return mav;
}

此处需要注意的是,拦截规则是拦截所有请求,还是拦截特定后缀(无法拦截并触发该方法的执行)?!

相关推荐

  1. SpringMVC基础Controller

    2024-03-28 06:06:01       43 阅读
  2. SpringMVC基础

    2024-03-28 06:06:01       21 阅读
  3. SpringMVC controller方法返回值见解3

    2024-03-28 06:06:01       49 阅读
  4. Controller配置总结(SpringMVC学习笔记二)

    2024-03-28 06:06:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 06:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 06:06:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 06:06:01       82 阅读
  4. Python语言-面向对象

    2024-03-28 06:06:01       91 阅读

热门阅读

  1. 软件测试基础(2)

    2024-03-28 06:06:01       46 阅读
  2. 【剑指offer】75. 和为S的两个数字

    2024-03-28 06:06:01       43 阅读
  3. 课时77:流程控制_until循环_until基础

    2024-03-28 06:06:01       44 阅读
  4. flutter boost 如何从native跳转到flutter页面

    2024-03-28 06:06:01       41 阅读
  5. Selenium 学习(0.22)——软件测试之小结

    2024-03-28 06:06:01       40 阅读
  6. 深入浅出(四)VTK库—3D可视化

    2024-03-28 06:06:01       40 阅读
  7. 边缘随机变量

    2024-03-28 06:06:01       41 阅读
  8. TCP面向字节流协议分析

    2024-03-28 06:06:01       40 阅读
  9. maya外部调用

    2024-03-28 06:06:01       44 阅读
  10. centos 安装 netstat

    2024-03-28 06:06:01       40 阅读
  11. ChatGPT指南:如何利用人工智能进行编程

    2024-03-28 06:06:01       44 阅读