当前位置: 首页 > news >正文

SpringMVC基础Controller

文章目录

  • Controller 的编写和配置
    • 1. Controller 注解类型
    • 2. @RequestMapping 注解类型
    • 3. 编写请求方法
    • 4. 请求参数和路径变量

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;
}

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

相关文章:

  • 鸿蒙(HarmonyOS)Navigation如何实现多场景UI适配?
  • 请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?
  • MC0248 密码判断器(判断强弱密码)
  • C/C++ ② —— C++11智能指针
  • 『Apisix进阶篇』动态负载均衡:APISIX的实战演练与策略应用
  • MySQL面试题--MySQL内部技术架构
  • SVM回归预测
  • AWS EC2设置root登录
  • centos 安装wget
  • npm常用命令详解
  • GEE:将分类特征和标签提取到样本点,并以(csv/shp格式)下载到本地
  • Rancher(v2.6.3)——Rancher部署Mysql(单机版)
  • Java解决幸运数字
  • 专项测试之「 性能测试」总结
  • 连组里服务器(自用)
  • 【React系列】如何构建React应用程序
  • canvas 高仿 Apple Watch 表盘
  • const let
  • Meteor的表单提交:Form
  • passportjs 源码分析
  • react 代码优化(一) ——事件处理
  • React 快速上手 - 07 前端路由 react-router
  • scala基础语法(二)
  • spring boot下thymeleaf全局静态变量配置
  • supervisor 永不挂掉的进程 安装以及使用
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 给github项目添加CI badge
  • 构建工具 - 收藏集 - 掘金
  • 如何用vue打造一个移动端音乐播放器
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 数据科学 第 3 章 11 字符串处理
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信小程序:实现悬浮返回和分享按钮
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​业务双活的数据切换思路设计(下)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (vue)页面文件上传获取:action地址
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (汇总)os模块以及shutil模块对文件的操作
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • *2 echo、printf、mkdir命令的应用
  • .Net IOC框架入门之一 Unity