为了账号安全,请及时绑定邮箱和手机立即绑定

SpringMVC从入门到精通之第四章

标签:
Java

在讲解一系列注解之前,我是默认大家都知道反射和注解概念的。如果不是很清楚的话,慕课网有很多教程的。
在注解中有一个概念是作用目标(也就是注解可以作用在:包名、类名(接口、枚举、注解)、参数、方法、构造器、局部变量)
第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),主要作用就是接受页面的参数,转发页面。中间的业务逻辑是调用业务类处理的这个就是MVC设计模式的思路。
我们来看下这个注解的源码:

@Target({ElementType.TYPE})// 表明只能定义在类上面
@Retention(RetentionPolicy.RUNTIME)//保留策略是RUNTIME,在JVM加载类时,会把注解加载到JVM内存中(它是唯一可以用反射来读取注解的策略)
@Documented//@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Component//spring框架规定当一个类不好归类(service、dao、controller)的时候可以使用这个注解,由此可见即便好归类内部还是使用的@Component注解
public @interface Controller {

    /**
     * The value may indicate a suggestion for a logical component name,
     * to be turned into a Spring bean in case of an autodetected component.
     * @return the suggested component name, if any
     */
    String value() default "";//默认值可以是组件名称,一般不写(看上面英文解释)
}

第二个知识点:@RequestMapping注解,同上面一样,这个注解的作用目标就跟@Controller不一样了,这个注解可以定义在类上面也可以定义在方法上面。
例如:

@Controller
@RequestMapping("/springmvc")
public class Test01_RequestMapping {
     /**
     * 1.@RequestMapping :除了修饰方法,还可以修饰类
     * 2.类定义处:提供初步的请求信息映射.相对于WEB应用的根目录(窄化请求)
     * 3.方法处:提供进一步的细分映射信息。相对于类定义处的URL。
     *      若类定义处为标注@RequestMapping,则方法出的URL相对于WEB应用的根目录
     * @return
     */
    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        System.out.println("@RequestMapping注解的作用目标");
        return "success";
    }

来看下这个注解的源码说明:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String[] value() default {};//默认值可以是多个
    RequestMethod[] method() default {};//限制请求方式
    String[] params() default {};//要求请求的URL包含指定的参数
。。。
}

示例代码:

    /**
     * 
     * @Title: testRequestMappingAttrMethodPost
     * @Description: TODO (限制请求方式只能是POST请求)
     * @Author: Hanson                
     * @Create Date: 2016年1月25日 下午1:38:01
     * @History: 2016年1月25日 下午1:38:01 Hanson Created.
     *
     * @return
     *
     */
    @RequestMapping(value="/testRequestMappingAttrMethodPost",method={RequestMethod.POST})
    public String testRequestMappingAttrMethodPost(){
        System.out.println("@RequestMaping注解的属性:method RequestMethod[]{RequestMethod.POST}");
        return "success";
    }
   /**
     * 
     * @Title: testRequestMappingAttrMethodGet
     * @Description: TODO (限制请求方式只能是GET请求)
     * @Author: Hanson                
     * @Create Date: 2016年1月25日 下午1:37:46
     * @History: 2016年1月25日 下午1:37:46 Hanson Created.
     *
     * @return
     *
     */
    @RequestMapping(value="/testRequestMappingAttrMethodGet",method={RequestMethod.GET})
    public String testRequestMappingAttrMethodGet(){
//请求url  "${pageContext.request.contextPath}/springmvc/testRequestMappingAttrParams?username=hanson&age=11"
        System.out.println("@RequestMaping注解的属性:method RequestMethod[]{RequestMethod.GET}");
        return "success";
    }

这个注解还支持Ant风格的请求:

Ant风格资源地址支持3种匹配符:
    ?:匹配文件中的一个字符
    *:匹配文件中任意字符
    **:**匹配多层路径
@RequestMapping 支持 Ant 风格的 URL :
/user/*/createUser  : 匹配 –/user/aaa/createUser、/user/bbb/createUser 等 URL
/user/*/createUser  : 匹配 –/user/aaa/createUser、/user/bbb/createUser 等 URL
/user/**/createUser : 匹配 –/user/createUser、/user/aaa/bbb/createUser 等 URL
/user/createUser??  : 匹配 –/user/createUseraa、/user/createUserbb 等 URL

例如:下面这种请求:
href="${pageContext.request.contextPath}/springmvc/testAntStyleURL/ccccc/abc"
示例代码:

/**
     * 
     * @Title: testAntStyleURL
     * @Description: TODO (测试@RequestMapping支持Ant风格的URL)
     * @Author: Hanson                
     * @Create Date: 2016年1月25日 下午1:46:46
     * @History: 2016年1月25日 下午1:46:46 Hanson Created.
     *
     * @return
     *
     */
    @RequestMapping("testAntStyleURL/*/abc")
    public String testAntStyleURL(){
        System.out.println("AntStyleURL:testAntStyleURL/*/abc");
        return "success";
    }

学完这一章你应该知道@Controller注解的作用范围,表示的类是一个后端控制器。
@RequestMapping注解的作用范围,在类上和在目标方法上的区别以及作用,以及能够限制请求方式等。有不明白的留言。谢谢

点击查看更多内容
25人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
334
获赞与收藏
3452

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消