标签注入时,属性必须要有对应name的set方法,否则会报错  

注解和标签是SpringMVC的,//没有事物层  

1、@Controller  

负责DispatcherServlet分发的请求,他把用户的请求数据封装成Model,然后吧改Model返回给view进行展示。  

特点:无需继承或实现某类接口,只需"@"标记,结合@requestMapping和@requestParam,即可被外界访问,  

不依赖HttpServletRequest、httpServletResponse  

@Controller标记的类如何交给Spring来管理?  

1.  

<bean class="com.huawei.controller.MyController"></bean>

指定具体类  

2.  

<context:component-scan base-package="com.huawei.controller"/>

指定包名  

2、@RequestMapping  

用来处理请求路径的映射,用在类上,表示该类中相应所有请求的方法,都应该以该路径作为父路径  

属性:  

value:指定请求的路径  

method:指定请求的method类型,GET,PUT.DELETE.POST  

consumes:指定处理请求的提交内容类型(Content-Type),application/json,text/html  

produces:指定返回的内容类型,仅当request请求头中(Accept)的类型中包含改指定类型时才返回  

params:  

request请求中必须包含某些指定的参数时才让该方法处理  

header:request请求中必须包含某些指定的header值,才让该方法处理  

3、@Resource和@Autowired  

两者均做bean注入时使用的,其实@Resource是javax.annotation.Resource,需要导入,但Spring支持该注解  

不同点:  

Autowired:  

Spring提供的注解,只按照类型注入。默认情况下要求依赖对象必须存在,如果允许null值,可设置reuqired属性为false,  

如果还想使用name来注入 ,可结合@Qualifier注解  

@Autowired 

 @Qualifier("userDao") 

 private UserDao userDao; 

 Resource:

有j2EE提供,@Resource有两个重要属性,name和type,特点是,指定什么,就按照哪种方式来注入

public class TestServiceImpl { 

  @Resource(name="userDao") 

     private UserDao userDao; // 用于字段上 

    
     @Resource(name="userDao") 

     public void setUserDao(UserDao userDao) { // 用于属性的setter方法上 

         this.userDao = userDao;

注,将Resource放在set方法上更符合面向对象的思想,对set方法操作而不是直接对属性进行操作 4、@ModelAttribute和@SessionAttribute 代表在所有的Controller在执行之前,先执行,@ModelAttribute方法,可用于注解和方法参数中 【【可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。】】 5、@PathVarible 将请求URL中的模板变量映射到功能处理方法的参数上,即取出模板中的变量作为参数

@Controller   

 public class TestController {   

      @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)   

      public String getLogin(@PathVariable("userId") String userId,   

  @PathVariable("roleId") String roleId){   

  System.out.println("User Id : " + userId);   

  System.out.println("Role Id : " + roleId);   

  return "hello";   

      }   

      @RequestMapping(value="/product/{productId}",method = RequestMethod.GET)   

      public String getProduct(@PathVariable("productId") String productId){   

    System.out.println("Product Id : " + productId);   

    return "hello";   

      }   

      @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",   

    method = RequestMethod.GET)   

      public String getRegExp(@PathVariable("regexp1") String regexp1){   

    System.out.println("URI Part 1 : " + regexp1);   

    return "hello";   

      }   

 }

6、@requestParam @requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"), 它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。 7、@ResponseBody 作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。 使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用; 8、@Component 相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。 9、@Repository 用于注解dao层,在daoImpl类上面注解。

添加剂:

1、 @RequestMapping:使用RequestMapping来映射request请求与处理器

指定请求路径的三种方式:

1.普通的具体的值 ,当然包含占位符 * 

2.可以指定为含有某变量的一类值(URI Template Patterns with Path Variables)–restful风格;

@RequestMapping("/testPathVariable/{id}") 

     public String testPathVariable(@PathVariable("id") Integer id2) { 

 System.out.println("testPathVariable: " + id2); 

 return SUCCESS; 

     }

3.可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")   

   public void handle(@PathVariable String version, @PathVariable String extension) {       

     // ...   

   }   

 }

高级用法:

requestMapping:

1.param属性:

@RequestMapping (value= "testParams" , params={ "param1=value1" , "param2" , "!param3" }) 

     public String testParams() { 

        System. out .println( "test Params..........." ); 

        return "testParams" ; 

     }

用@RequestMapping 的params 属性指定了三个参数,这些参数都是针对请求参数而言的,它们分别表示参数param1 的值必须等于value1 ,参数param2 必须存在,值无所谓,参数param3 必须不存在,只有当请求/testParams.do 并且满足指定的三个参数条件的时候才能访问到该方法。所以当请求/testParams.do?param1=value1&param2=value2 的时候能够正确访问到该testParams 方法,当请求/testParams.do?param1=value1&param2=value2&param3=value3 的时候就不能够正常的访问到该方法,因为在@RequestMapping 的params 参数里面指定了参数param3 是不能存在的。

2.method属性

@RequestMapping (value= "testMethod" , method={RequestMethod. GET , RequestMethod. DELETE }) 
     public String testMethod() { 
        return "method" ; 
     }

在上面的代码中就使用method 参数限制了以GET 或DELETE 方法请求/testMethod 的时候才能访问到该Controller 的testMethod 方法。

3.headers属性

@RequestMapping (value= "testHeaders" , headers={ "host=localhost" , "Accept" }) 
     public String testHeaders() { 
        return "headers" ; 
     }

headers 属性的用法和功能与params 属性相似。在上面的代码中当请求/testHeaders.do 的时候只有当请求头包含Accept 信息,且请求的host 为localhost 的时候才能正确的访问到testHeaders 方法。

-----------------------------------------------------

@RequestMapping 标记的处理器方法支持的方法参数和返回类型

  1. 支持的方法参数类型

     (1 )HttpServlet 对象,主要包括HttpServletRequest 、HttpServletResponse 和HttpSession 对象。 这些参数Spring 在调用处理器方法的时候会自动给它们赋值,所以当在处理器方法中需要使用到这些对象的时候,可以直接在方法上给定一个方法参数的申明,然后在方法体里面直接用就可以了。但是有一点需要注意的是在使用HttpSession 对象的时候,如果此时HttpSession 对象还没有建立起来的话就会有问题。

     (2 )Spring 自己的WebRequest 对象。 使用该对象可以访问到存放在HttpServletRequest 和HttpSession 中的属性值

     (3 )InputStream 、OutputStream 、Reader 和Writer 。 InputStream 和Reader 是针对HttpServletRequest 而言的,可以从里面取数据;OutputStream 和Writer 是针对HttpServletResponse 而言的,可以往里面写数据。

     (4 )使用@PathVariable 、@RequestParam 、@CookieValue 和@RequestHeader 标记的参数。

     (5 )使用@ModelAttribute 标记的参数。

     (6 )java.util.Map 、Spring 封装的Model 和ModelMap 。 这些都可以用来封装模型数据,用来给视图做展示。

     (7 )实体类。 可以用来接收上传的参数。

     (8 )Spring 封装的MultipartFile 。 用来接收上传文件的。

     (9 )Spring 封装的Errors 和BindingResult 对象。 这两个对象参数必须紧接在需要验证的实体对象参数之后,它里面包含了实体对象的验证结果。

 2. 支持的返回类型

     (1 )一个包含模型和视图的ModelAndView 对象。

     (2 )一个模型对象,这主要包括Spring 封装好的Model 和ModelMap ,以及java.util.Map ,当没有视图返回的时候视图名称将由RequestToViewNameTranslator 来决定。

     (3 )一个View 对象。这个时候如果在渲染视图的过程中模型的话就可以给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。

     (4 )一个String 字符串。这往往代表的是一个视图名称。这个时候如果需要在渲染视图的过程中需要模型的话就可以给处理器方法一个模型参数,然后在方法体里面往模型中添加值就可以了。

     (5 )返回值是void 。这种情况一般是我们直接把返回结果写到HttpServletResponse 中了,如果没有写的话,那么Spring 将会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果视图中需要模型的话,处理方法与返回字符串的情况相同。

     (6 )如果处理器方法被注解@ResponseBody 标记的话,那么处理器方法的任何返回类型都会通过HttpMessageConverters 转换之后写到HttpServletResponse 中,而不会像上面的那些情况一样当做视图或者模型来处理。