SpringMVC 基于annotation的详解

Spring2.5引入基于annotation的 Controller 配置控制器,使用RequestMapping 配置实际处理的Handler


注解的详解:
  ①:@Controll  ( annotation indicates that a particular class serves the role of a controller, The dispatcher scans such annotated classes for mapped methods and detects @RequestMapping annotations  这是官方问答的解释)    
          首先这是一个类,充当了服务的控制器,所以就特殊了  ,Spring 的前端控制器 dispatcher 在有此注解的类中查找有@RequestMapping注解的方法
     当然也可以在xml 文件中配置bean在起到和@Controll一样的作用
     如果使用基于注解的就得在控制文件中配置  <context:component-scan base-package="controller所在包名"/>
          
  ②:@RequestMapping 请求到处理器功能方法的映射规则;
  
   .value = "/hello" : 访问次处理器的url,如果只有此配置参数,value 可以省略,直接写url就可以


   .method=RequestMethod.GET
        GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
        
        在使用基于请求方法的时候,在form表单中 添加一个name="_method",value=""为对应的请求方法
        
   .headers={}:http请求的头的参数     eg: "content-type=text/*"
   .params={}:请求参数  eg: "myParam=myValue", "myParam!=myValue"
  
  ③:@RequestParam:请求参数到处理器功能处理方法的方法参数上的绑定;
  eg:  public String TestRequestParam(@RequestParam(value = "name", required = false, defaultValue = "Tom") String name,
@RequestParam(value = "age") int age)
  


  ④:@PathVariable  :eg:
  
  @RequestMapping("/TestPathVariable1/{name}")
public String TestPathVariable1(@PathVariable("name") String name) {
System.out.println(name);
return SUCCESS;
}
  ④:@ModelAttribute:请求参数到命令对象的绑定;
  
   如果客户提交的为一个pojo类,怎使用此注解来获取,当使用此注解后,参数会别放在session域中
  
  package com.dxf.bean;


public class Person {


private String name;


private int age;


private Car car;


public Person() {
super();
}


public Person(String name, int age, Car car) {
super();
this.name = name;
this.age = age;
this.car = car;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}


public Car getCar() {
return car;
}


public void setCar(Car car) {
this.car = car;
}


@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
}


}
  package com.dxf.bean;


public class Car {


private String name;


private double space;


private double price;


public Car() {
super();
}


public Car(String name, double space, double price) {
super();
this.name = name;
this.space = space;
this.price = price;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public double getSpace() {
return space;
}


public void setSpace(double space) {
this.space = space;
}


public double getPrice() {
return price;
}


public void setPrice(double price) {
this.price = price;
}


@Override
public String toString() {
return "Car [name=" + name + ", space=" + space + ", price=" + price + "]";
}


}
  <form action="testPojo" method="POST">




person_name:<input type="text" name="name"> <br>
person_age:<input type="text" name="age"> <br>
car_name:<input type="text" name="car.name"><br>
car_space:<input type="text" name="car.space"><br>
car_price:<input type="text" name="car.price"> <input
type="submit" value="Submit">


</form>

@RequestMapping("/testPojo")
public String testPojo(@ModelAttribute("person") Person person) {//默认会把此参数放到session


System.out.println(person);


return "success";
}
  


  ⑤:@SessionAttributes:用于声明session级别存储的属性,放置在处理器类上,通常列出模型属性(如:@ModelAttribute)对应的名称,则这些属性会透明的保存到session中;
  
  类上注解:
   @SessionAttributes(value = { "person" }, types = { Person.class })
 
 handler直接访问
    @RequestMapping("/testSession")
public String testSession(Person person) {
System.out.println(person);
return "success";
}
  
  
    1、此注解在应该在Controll类上注解,此时,只要在此类的Handler就能访问此session对象
    2、配置访问此Controll 时,保证 session中有 value = "person"属性,否则会报
        Session attribute 'person' required - not found in session
    
 
  
  


  
     
  
  
  
  
  

猜你喜欢

转载自blog.csdn.net/qq_26837711/article/details/53591499