本文主要就是举例子:
一、参数问题
1.mvc支持REST风格 @PathVariable
注意点:前台要传递的参数直接写在请求地址后面,Controller 的RequestMapping 的value也要加上{XXX}进行接收,并在方法参数中加上@PathVariable,把值传递给形参
前端:
<form action="aaa/1234" method="post">
<input type="submit">
</form>
mvc:
@RequestMapping(value = "aaa/{id}",method = RequestMethod.POST)
public String aaa(@PathVariable("id") Integer id){
System.out.println("post:增"+id);
//Service层实现真正的增
return "success";
}
2.表单参数的获取
采用的是@RequestParam注解
前端:
<form action="handler/testParam" method="get">
name:<input type="text" name="uname"/><br/>
<!--age:<input type="text" name="uage"/><br/>-->
<input type="submit" value="查">
</form>
后端:
@RequestMapping("testParam")//required=false:该属性不是必须的 defaultValue:指定默认值
public String testParam(@RequestParam("uname") String name,@RequestParam(value = "uage",required = false,defaultValue = "23") Integer age){
System.out.println(name);
System.out.println(age);
return "success";
}
3.取消息头信息
<a href="handler/testRequestHeader">testRequestHeader</a>
@RequestMapping("testRequestHeader")//required=false:该属性不是必须的 defaultValue:指定默认值
public String testRequestHeader(@RequestHeader("Accept-Language") String a){
System.out.println(a);
return "success";
}
4.获取cookie信息
用户第一次访问浏览器,浏览器会给用户分配一个JsessionId的cookie,下面举例子
<a href="handler/testCookieValue">testCookieValue</a>
@RequestMapping("testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String s){
System.out.println(s);
return "success";
}
5.直接将表单的值封装成javaBean
实体类
public class Student {
private int id;
private String name;
private int age;
private Address address;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student() {
}
public Student(int id, String name, Address address) {
this.id = id;
this.name = name;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return this.id+"-"+this.name+"-"this.age+"-"this.address;
}
package entity;
public class Address {
private String homeAddress;
private String SchoolAddress;
public Address() {
}
public Address(String homeAddress, String schoolAddress) {
this.homeAddress = homeAddress;
SchoolAddress = schoolAddress;
}
public String getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}
public String getSchoolAddress() {
return SchoolAddress;
}
public void setSchoolAddress(String schoolAddress) {
SchoolAddress = schoolAddress;
}
@Override
public String toString() {
return "Address{" +
"homeAddress='" + homeAddress + '\'' +
", SchoolAddress='" + SchoolAddress + '\'' +
'}';
}
}
前台的表单:注意name值必须和实体类的属性相同,而且支持级联写法!
<form action="handler/testObjectProperties" method="post">
id:<input name="id" type="text"/><br/>
name:<input name="name" type="text"/><br/>
homeAddress:<input name="address.homeAddress" type="text"/><br/>
schoolAddress:<input name="address.schoolAddress" type="text"><br/>
<input type="submit" value="点击老子">
</form>
controller:
@RequestMapping("testObjectProperties")
public String testObjectProperties(Student student){//要求student属性必须和form 表单中的属性一致 支持级联
System.out.println(student);
return "success";
}
6.对矩阵变量的支持
矩阵变量就是将参数变量放在 / / 路径中间;
首先开启SpringMVC对矩阵变量的支持:
<mvc:annotation-driven enable-matrix-variables="true" />
然后写个测试的Controller:
@ResponseBody
@RequestMapping("/jj/{path}")
public Map<?, ?> jj(@PathVariable("path") String path,
@MatrixVariable("name") String name,
@MatrixVariable("ages") List<Integer> ages){
Map<String, Object> result = new HashMap<>();
result.put("name", name);
result.put("path", path);
result.put("ages", ages);
return result;
}
访问测试 :
二、跳转问题
如果直接写一个字符串,他会默认和视图解析器的前缀和后缀拼接,并且默认使用的是请求转发的方式
@RequestMapping("welcome")//用于拦截对应的href
public String welcome(){
return "success";//会和前缀后缀拼成 view/success.jsp
}
完整路径的请求转发写法:
@RequestMapping(value="welcome4/**/text")//用于拦截对应的href
public String welcome4(){
return "forward:/view/success.jsp";
}
完整路径的重定向方式:
@RequestMapping(value="welcome4/**/text")//用于拦截对应的href
public String welcome4(){
return "redirect:/view/success.jsp";
}