在注解的源代码中,还可以看到,在value
属性的声明之前还添加了@AliasFor("path")
注解,即表示“配置value
属性与配置path
属性是完全等效的,且配置方式也完全相同”,所以,在源代码中,还有:
/** * The path mapping URIs (e.g. {@code "/profile"}). * <p>Ant-style path patterns are also supported (e.g. {@code "/profile/**"}). * At the method level, relative paths (e.g. {@code "edit"}) are supported * within the primary mapping expressed at the type level. * Path mapping URIs may contain placeholders (e.g. <code>"/${profile_path}"</code>). * <p><b>Supported at the type level as well as at the method level!</b> * When used at the type level, all method-level mappings inherit * this primary mapping, narrowing it for a specific handler method. * <p><strong>NOTE</strong>: A handler method that is not mapped to any path * explicitly is effectively mapped to an empty path. * @since 4.2 */ @AliasFor("value") String[] path() default {};
如果一定要说value与path的区别,就是path更加明确的表现了“语义”,并且,path属性是SpringMVC框架从4.2版本开始加入的!
在源代码中,还有:
/** * The HTTP request methods to map to, narrowing the primary mapping: * GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE. * <p><b>Supported at the type level as well as at the method level!</b> * When used at the type level, all method-level mappings inherit * this HTTP method restriction (i.e. the type-level restriction * gets checked before the handler method is even resolved). */ RequestMethod[] method() default {};
以上代码表示“可以配置method属性,其值是RequestMethod数组的”。
该属性的作用是“限制请求方式”,如果没有配置该属性,则允许使用任何请求方式,一旦配置了该属性,只要被配置了的若干种请求方式是允许的,没有被配置的请求方式是不允许的!
例如,配置为:
@RequestMapping(path="handle_login.do", method=RequestMethod.POST)
如果尝试使用GET方式对以上路径提交请求,将会出现405错误,错误提示信息为:
HTTP Status 405 – Method Not Allowed
Message : Request method 'GET' not supported
在SpringMVC中,还提供了一些较为高级的注解,这些注解就具有基础注解的综合属性,例如,@PostMapping就等效于@RequestMapping(method = RequestMethod.POST)!类似的,还有@GetMapping、@PutMapping、@DeleteMapping、@PatchMapping……都是类似的效果,即“限制为特定的某1种请求方式”!
总的来说,如果在类的声明之前添加注解,就应该使用@RequestMapping,在处理请求的方法之前,如果要将请求类型限制为特定的某1种,则应该优先使用@GetMapping、@PostMapping等注解,如果不限制请求方式,或限制的类型不只1种,则使用@RequestMapping!
2. SpringMVC阶段小结
【理解】SpringMVC框架的作用:主要解决了如何接收请求、如何给予响应的问题;
【理解】SpringMVC的核心执行流程(参考流程图);
【掌握】创建SpringMVC项目:配置pom.xml使得没有web.xml也不会报错,且添加spring-webmvc依赖,勾选Tomcat,创建启动入口类并重写其中的3个抽象方法,创建SpringMVC的配置类;
【掌握】使用控制器处理客户端提交的请求:控制器类必须放在组件扫描的包或其子孙包中,控制器类必须添加@Controller注解,处理请求的方法之前需要添加@RequestMapping或对应更高级的注解来配置请求路径,方法应该是public权限的,返回值暂时是String类型表示“视图名称”,方法名称可以自定义,方法的参数列表可以按需设计;
【掌握】当结合使用Thymeleaf时,需要先添加thymeleaf、thymeleaf-spring4或thymeleaf-spring5依赖,并在SpringMVC的配置中类配置Thymeleaf的视图解析器;
【掌握】接收请求参数的方式:直接将请求参数声明为处理请求的方法的参数,或将若干个请求参数封装起来并使用封装的类型作为处理请求的方法的参数;
【掌握】将控制器中的数据转发到视图组件;
【理解】转发与重定向的区别,并掌握正常的选取;
【掌握】使用Session;
【掌握】开发并配置拦截器;
【掌握】@RequestMapping及相关高级注解的使用。