首页 > 代码库 > SpringMVC从入门到精通之第四章

SpringMVC从入门到精通之第四章

第一个知识点:@Controller注解,用于标识这个类是一个后端控制器(类似struts中的action),
主要作用就是接受页面的参数,转发页面。
中间的业务逻辑是调用业务类处理的这个就是MVC设计模式的思路。
我们来看下这个注解的源码:

package org.springframework.stereotype;

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

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

例如:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@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请求)
     * @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请求)
     * @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="http://www.mamicode.com/${pageContext.request.contextPath}/springmvc/testAntStyleURL/ccccc/abc"
示例代码:

@RequestMapping("testAntStyleURL/*/abc") 
     public String testAntStyleURL(){ 
         System.out.println("AntStyleURL:testAntStyleURL/*/abc"); 
         return "success"; 
    }
学完这一章你应该知道@Controller注解的作用范围,表示的类是一个后端控制器。
@RequestMapping注解的作用范围,在类上和在目标方法上的区别以及作用,以及能够限制请求方式等。
作者: HansonQ
链接:http://www.imooc.com/article/4299
来源:慕课网

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

SpringMVC从入门到精通第三章


作者: HansonQ
链接:http://www.imooc.com/article/4299
来源:慕课网

SpringMVC从入门到精通之第四章