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
注解的详解:
①:@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