手册

目录

控制器(Controller)

收藏774

阅读11891

更新时间2022-04-11

控制器(Controller)是MVC体系中的核心,它负责处理浏览器发起的所有请求和决定响应内容的逻辑处理,控制器就是一个标准的Java类,不需要继承任何基类,通过类中的方法向外部暴露接口,该方法的返回结果将决定向浏览器响应的具体内容;

下面通过示例编写WebMVC模块中的控制器:

@Controller
public class DemoController {

    @RequestMapping("/sayhi")
    public IView sayHi() {
        return View.textView("Hi, YMPer!");
    }
}

启动Tomcat服务并访问http://localhost:8080/sayhi,得到的输出结果将是:Hi, YMPer!

从以上代码中看到有两个注解,分别是:

  • @Controller:声明一个类为控制器,框架在启动时将会自动扫描所有声明该注解的类并注册为控制器;

    name:控制器名称,默认为“”(该参数暂时未被使用);

    singleton:指定控制器是否为单例,默认为true;

  • @RequestMapping:声明控制器请求路径映射,作用域范围:类或方法;

    value:控制器请求路径映射,必选参数;

    method[]:允许的请求方式,默认为GET方式,取值范围:GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE;

    header[]:请求头中必须存在的头名称;

    param[]:请求中必须存在的参数名称;

示例一:

创建非单例控制器,其中的控制器方法规则如下:

  1. 控制器方法仅支持POST和PUT方式访问;
  2. 请求头参数中必须包含x-requested-with=XMLHttpRequest(即判断是否AJAX请求);
  3. 请求参数中必须存在name参数;
@Controller(singleton = false)
@RequestMapping("/demo")
public class DemoController {

    @RequestMapping(value = "/sayhi",
        method = {Type.HttpMethod.POST, Type.HttpMethod.PUT},
        header = {"x-requested-with=XMLHttpRequest"},
        param = {"name=*"})
    public IView sayHi() {
        return View.textView("Hi, YMPer!");
    }
}

示例说明:

本例主要展示了如何使用@Controller和@RequestMapping注解来对控制器和控制器方法对进配置;

控制器方法必须使用public修饰,否则无效;

由于控制器上也声明了@RequestMapping注解,所以控制器方法的请求路径映射将变成:/demo/sayhi;

示例二:

上例中展示了对请求的一些控制,下面展示如何对响应结果进行控制,规则如下:

  1. 通过注解设置响应头参数:
    • from = "china"
    • age = 18
  2. 通过注解设置控制器返回视图及内容:"Hi, YMPer!"
@Controller
@RequestMapping("/demo")
public class DemoController {

    @RequestMapping("/sayhi")
    @ResponseView(value = "Hi, YMPer!", type = Type.View.TEXT)
    @ResponseHeader({
            @Header(name = "from", value = "china"),
            @Header(name = "age", value = "18", type = Type.HeaderType.INT)})
    public void sayHi() {
    }
}

本例中用到了三个注解:

  • @ResponseView:声明控制器方法默认返回视图对象, 仅在方法无返回值或返回值无效时使用

    name:视图模板文件路径,默认为"";

    type:视图文件类型,默认为Type.View.NULL;

  • @ResponseHeader:设置控制器方法返回结果时增加响应头参数;

    value[]:响应头@Header参数集合;

  • @Header:声明一个请求响应Header键值对,仅用于参数传递;

    name:响应头参数名称,必选参数;

    value:响应头参数值,默认为"";

    type:响应头参数类型,支持STRING, INI, DATE,默认为Type.HeaderType.STRING;

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号