概念

控制器是 MVC 中的 C

  • 控制逻辑(前端控制器)
  • 功能处理(自定义控制器)

功能处理(自定义控制器)的作用

  1. 收集、验证请求参数并绑定到相应的对象
  2. 处理业务获得模型数据
  3. 返回视图

常见的Controller

 

命令控制器代码演示

public class MyCommandController extends AbstractCommandController{//无参构造方法public MyCommandController(){//把UserModel模型绑定到命令对象command上this.setCommandClass(UserModel.class);//简单的数据校验器,校验的结果为errors,校验规则是由其实例对象中确定this.setValidator(new UserValidator());}/*** 处理方法*/@Overrideprotected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {//提供一个返回的模型视图对象ModelAndView mav=new ModelAndView();//组装要在页面上显示的数据UserModel user=(UserModel) command;mav.addObject("user", user);//指定逻辑视图名mav.setViewName("command");//校验信息org.springframework.validation.BeanPropertyBindingResult: 0 errorsSystem.out.println("校验信息"+errors.getMessage());return mav;}
}
public class UserValidator implements Validator {/*** 验证数据模型是否绑定到命令对象了*/public boolean supports(Class<?> clazz) {return UserModel.class.equals(clazz);}/*** 进行数据验证*/public void validate(Object obj, Errors errors) {ValidationUtils.rejectIfEmpty(errors, "userName", "用户名为空了,不OK");UserModel user=(UserModel) obj;if(null==user.getPassword()||"".equals(user.getPassword())){errors.rejectValue("password", "密码为空,异常!");}}
}

二、FormController(表单控制器)

良好的表单支持:

  • 将数据展示到表单
  • 处理表单提交的数据

实现步骤:

  1. 继承SimpleFormController类
  2. 重写要实现的方法
    (1) formBackingObject():通过commandName表单展示数据
    (2) referenceData():展示表单时需要的数据
    (3) doSubmitAction():处理表单提交请求
//进行表单数据回显@Overrideprotected Object formBackingObject(HttpServletRequest request)throws Exception {//组装页面要展示的数据UserModel user=new UserModel();user.setUserName("张三");return user;}//提供表单需要的其他数据@Overrideprotected Map referenceData(HttpServletRequest request) throws Exception {//提供返回对象Map<String,String> resultMap=new HashMap<String, String>();resultMap.put("age", "20");return resultMap;}//处理表单提交请求@Overrideprotected void doSubmitAction(Object command) throws Exception {UserModel user=(UserModel) command;System.out.println(user.toString());}
  1. 构造方法注册命令类和命令名称

     publicMyFormControlIer(){setCommandClass(User.class);//命令对象实现类setCommandName("user");//命令对象的名字}
    

  2. 配置文件 ~~~java

#### 三、MultiActionController(多功能控制器)
- 支持在一个控制器里面添加多个功能处理方法
- 可以通过方法名解析器或委托对象模式将多个请求的处理方法放置到一个控制器里
- 默认使用InternalPathMethodNameResolver解析URL和方法名的映射实现步骤:
1. 继承MultiActionController
2. 提供增删改查的方法(模拟)
3. 配置文件
~~~java
<bean name="/user/*" class="cn.kgc.controllers.MyMultiController"/>

多功能控制器代码演示

public class MyMultiController extends MultiActionController {//模拟一个数据库private Map<String,Object> dataMap=new HashMap<String, Object>();//增加public ModelAndView add(HttpServletRequest request,HttpServletResponse response, UserModel user) {// 提供一个返回对象ModelAndView mav = new ModelAndView();// 如果是get请求,返回到添加页面if ("GET".equals(request.getMethod())) {mav.setViewName("add");return mav;}if ("POST".equals(request.getMethod())) {// 如果是post请求,添加数据到dataMapdataMap.put(user.getUserName(), user);return list(request,response,user);}return null;}//删除public ModelAndView delete(HttpServletRequest request,HttpServletResponse response, UserModel user){//删除数据dataMap.remove(user.getUserName());return list(request,response,user);}//修改public ModelAndView update(HttpServletRequest request,HttpServletResponse response, UserModel user){ModelAndView mav=new ModelAndView();//如果是get请求 那么把要修改的数据显示到修改页面(获取)if("GET".equals(request.getMethod())){//把要修改的user对象拿出来UserModel targetUser = (UserModel) dataMap.get(user.getUserName());mav.addObject("targetUser", targetUser);mav.setViewName("update");return mav;}//如果是post请求,将目标数据进行修改,然后调用查询方法进行展示if("POST".equals(request.getMethod())){UserModel updateUser = (UserModel) dataMap.get(user.getUserName());updateUser.setPassword(user.getPassword());//将更新后的数据存到map中dataMap.put(user.getUserName(), updateUser);return list(request,response,user);}return null;}//查询public ModelAndView list(HttpServletRequest request,HttpServletResponse response,UserModel user){// 提供一个返回对象ModelAndView mav = new ModelAndView();mav.addObject("dataMap", dataMap);mav.setViewName("list");return mav;}
}

控制器Controller相关推荐

  1. ASP.NET MVC 5 入门教程 (2) 控制器Controller

    原文:ASP.NET MVC 5 入门教程 (2) 控制器Controller 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get ...

  2. kafka专题:kafka的总控制器Controller、消费者重分配策略等核心设计原理详解

    文章目录 1. Kafka核心总控制器Controller 1.1 核心总控制器Controller的Leader选举 1.2 Partition副本选举Leader机制 2. 消费者消费偏移量off ...

  3. 【SpringMVC 笔记】控制器 Controller 与 RestFul 风格

    SpringMVC 笔记 控制器 Controller 实现 Controller 接口 创建控制器 @Controller 注解创建控制器 @RequestMapping 使用 method 属性指 ...

  4. ASP.NET/C# 控制器Controller的深入理解

    ASP.NET/C# 控制器Controller的深入理解 1.理解控制器 1.1控制器的角色 (1)中转作用:控制器通过前面的学习大家应该知道它是一个承上启下的作用,根据用户输入,执行响应行为(动作 ...

  5. yii2 ajax访问控制器,yii2控制器Controller Ajax操作示例

    本文实例讲述了yii2控制器Controller Ajax操作的方法.分享给大家供大家参考,具体如下: request->isAjax) { $data = Yii::$app->requ ...

  6. 控制器Controller的使用

    Java知识点总结:想看的可以从这里进入 目录 3.3.控制器Controller 3.3.1.接收参数 1.普通参数 2.URL参数 3.JSON参数 3.3.2.共享数据 3.3.3.转发和重定向 ...

  7. 控制器Controller(保姆级教程)

    控制器Controller(保姆级教程) 实现Controller接口 使用注解@Controller(声明Spring类的实例是一个控制器) 控制器复杂提供访问应用程序的行为 通常通过 接口定义和 ...

  8. 后端——egg.js是什么、egg.js安装、约定规则、路由Router、控制器Controller、跨域

    目录 一.egg.js是什么 二.egg安装 三.约定规则 四.路由Router 五.控制器Controller 六.跨域 1.egg-cors 1.下载 2.开启插件 3.配置插件 4.使用: 2. ...

  9. 9、Kubernetes控制器Controller详解

    文章目录 一.Statefulset(有状态应用) 1.1 无状态应用 1.2 有状态应用 1.3 部署有状态应用 二.DaemonSet(守护进程) 三Job和CronJob(定时任务) 3.1 J ...

  10. spring mvc DispatcherServlet详解之一--request通过HandlerMaping获取控制器Controller过程

    整个spring mvc的架构如下图所示: 现在来讲解DispatcherServletDispatcherServlet的第一步:获取控制器. HandlerMapping HandlerMappi ...

最新文章

  1. 关于机器学习,不可不知的15个概念
  2. 哪些模块可用于python性能分析_Python调用C模块以及性能分析
  3. mysql8自定义安装位置_【MySQL】Windows10:MySQL 8 自定义路径安装
  4. 数位dp 的简单入门
  5. 安装python后如何打开-Python的安装与使用
  6. Javascript 严格模式详解
  7. 物料Bapi默认采购价值代码
  8. 【集合之HashMap】HashMap实现原理及非线程安全原因
  9. web worker原理 SSE原理
  10. SEO优化篇 - 搜索引擎抓取href=#!锚点
  11. 最新章节 第238章 超级计算机的安排,第238章 谁敢动我们十八里铺的人?
  12. HashMap TreeMap专题
  13. AI队列长度检测:R-CNN用于使用Keras进行自定义对象检测
  14. 微信公众平台体验(二)(单词翻译)
  15. bootstrap 学习 ---css样式学习
  16. 如何在virtualenv环境中安装指定的python版本
  17. ABB机器人示教器上人机界面的功能
  18. git status 命令详解
  19. Rodrigues’ Rotation Formula罗德里格旋转公式详解(坐标轴旋转)
  20. Matlab三相全桥逆变电路的仿真

热门文章

  1. 惯用语(目~/足~/手~)
  2. ZED深度相机配置后无法显示的原因
  3. 人像3D模型互动展示 | 做个逼真的人像模型,get潮玩的新玩法
  4. 2021年登高架设新版试题及登高架设考试平台
  5. 好的android 相关的技术博客
  6. 【idea】实用辅助插件(彩虹括号插件)
  7. 自媒体人如何成为写作高手?这三点你一定要掌握
  8. 同步带周长计算公式_同步带选型计算方法公式及步骤
  9. 关于模型与视口相切与视图最大化的方法
  10. android usb采集卡,安卓添加USB外置UVC摄像头