配置完成后如何让SpringMVC去处理用户的每一个请求?
创建控制器:
使用@Controller修饰某一个功能类此类会被SpringMVC扫描加入控制器
URL处理方法:
使用 @RequestMapping(XXX) 修饰方法或类
/**
* @RequestMapping 可以修饰方法也可以修饰类
* 修饰类定义:提供初步的映射信息,相对与WEB路径
* 修饰方法:提供进一步的细分映射详细
* 相对于类定义处的URL,若类的定义处没有使用@RequestMapping,则该方法相对于WEB应用的根目录
* */
@RequestMapping("/testRequestMapping")
public String testRequestMapping() {
log("测试 @RequestMapping");
return url;
}
html:
<a href="SpringMVC/testRequestMapping">@RequestMapping修饰类和方法</a>
指定请求方式
使用@RequestMapping注解中method属性来指定请求方式
/**
* 使用method属性来指定请求方式
* */
@RequestMapping(value="/testMethod",method=RequestMethod.POST)
public String testMethod() {
log("测试 method属性");
return url;
}
html:
<a href="SpringMVC/testMethod">使用method属性来指定请求方式 get</a>
<br>
<form action="SpringMVC/testMethod" method="POST">
<input type="submit" value="submit POST" />
</form>
使用params属性 限定参数 支持简单的表达式
/**
* 使用params属性 限定参数 支持简单的表达式
* param:表示必须包含这个参数
* !param:表示必须不包含这个参数
* param!=value:表示这个参数不能等于于value
* 可以设置多个
* */
@RequestMapping(value="/testParams",params={"username","age!=2"},method=RequestMethod.POST)
public String testParams() {
log("测试 请求参数");
return url;
}
html:
<a href="SpringMVC/testParams?username=张三&age=2">测试 请求参数限制了</a>
<br>
<a href="SpringMVC/testParams?username=&age=19">测试 请求参数</a>
使用headers属性 限定请求头 支持简单的表达式
/**
* 使用headers属性 限定请求头 支持简单的表达式
* 限制请求头
* */
@RequestMapping(value="/testHeaders",headers= {"Accept-Language=zh-CN,zh;q=0.8,en;q=0.6"},params={"username","age"})
public String testHeaders() {
log("测试 请求头");
return url;
}
html:
<a href="SpringMVC/testHeaders">测试 请求头</a>
可以使用 params headers来精确的映射请求 params headers支持简单的表达式
使用@RequestMapping映射请求 .ant风格资源地址支持3种匹配符
/**
* 使用@RequestMapping映射请求 .ant风格资源地址支持3种匹配符
* ?匹配文件一个字符
* * 匹配文件任意字符
* **匹配多层路径
* */
@RequestMapping("/testAntPath/*/path")
public String testAntPath() {
log("测试 url通配符");
return url;
}
html:
<a href="SpringMVC/testAntPath/XXX/path">测试 url通配符 XXX可以为任意字符</a>
@PathVariable 映射url綁定的占位符
通过@PathVariable可以将URl中占位符参数绑定到控制器处理方法中
/**
* @PathVariable 映射url綁定的占位符
* 通过@PathVariable可以将URl中占位符参数绑定到控制器处理方法中
* */
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id")Integer id ) {
log("测试 @PathVariable 参数="+id);
return url;
}
html:
<a href="SpringMVC/testPathVariable/155244">@PathVariable
映射url綁定的占位符</a>
Rest 风格URL
/**
* Rest 风格URL
* 新增 /XXX POST
* 修改 /XXX/1 PUT
* 获取 /XXX/1 GET
* 删除 /XXX/1 DELETE
*
*
*如何放送PUT DELETE 请求
* 1在wed.xml配置HiddenHttpMethodFilter
* 2需要发送post请求
* 3需要在发送post 请求时携带 _method参数 指定 DELETE或PUT
*
* 在SpringMVC的目标方法中如何的到id
* 使用@PathVariable注解
* */
/**
*测试rest请求 get
* */
@RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)
public String testRestGet(@PathVariable("id")Integer id ) {
log("测试rest请求 get 参数="+id);
return url;
}
/**
* 测试rest请求 post
* */
@RequestMapping(value="/testRest",method=RequestMethod.POST)
public String testRestPost() {
log("测试rest请求 post ");
return url;
}
/**
*测试rest请求 delete
* */
@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable("id")Integer id ) {
log("测试rest请求 delete 参数="+id);
return url;
}
/**
*测试rest请求 put
* */
@RequestMapping(value="/testRest/{id}",method=RequestMethod.PUT)
public String testRestPut(@PathVariable("id")Integer id ) {
log("测试rest请求 put 参数="+id);
return url;
}
html:
<a href="SpringMVC/testRest/1">get请求</a>
<form action="SpringMVC/testRest" method="post">
<input type="submit" value="post请求" />
</form>
<br>
<form action="SpringMVC/testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE" /> <input
type="submit" value="delete请求" />
</form>
<br>
<form action="SpringMVC/testRest/1" method="post">
<input type="hidden" name="_method" value="PUT" /> <input
type="submit" value="put请求" />
</form>
获取请求参数
第一种
/**
* 获取请求参数
* 使用@RequestParam映射参数:
* value:请求的参数名
* required:是否必须,默认为true
* defaultValue:请求参数默认值
*/
@RequestMapping(value="/testRequestParam")
public String testRequestParam(@RequestParam(value="name",required=false,defaultValue="null") String name,@RequestParam(value="age") Integer age) {
log("测试获取请求参数 name="+name+" age="+age);
return url;
}
html:
<a href="SpringMVC/testRequestParam?name=陈玖旭&age=24">发送参数1</a>
<br>
<a href="SpringMVC/testRequestParam?&age=24">发送参数2</a>
第二种 Pojo方式:
创建参数实体对象:
地址
package entities;
public class Addresss {
private String province;
private String city;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "address [province=" + province + ", city=" + city + "]";
}
}
用户
package entities;
public class User {
private String uname;
private String password;
private String email;
private int age;
private Addresss addresss;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Addresss getAddresss() {
return addresss;
}
public void setAddresss(Addresss addresss) {
this.addresss = addresss;
}
@Override
public String toString() {
return "User [uname=" + uname + ", password=" + password + ", email=" + email + ", age=" + age + ", addresss="
+ addresss + "]";
}
}
处理:
/**
* 获取请求参数通过Pojo
* SpringMVC会根据Pojo的属性名自动为该对象属性提供值支持级联属性
* */
@RequestMapping(value="/testRequestParamPojo")
public String testRequestParamPojo(User user) {
log("获取请求参数通过Pojo user="+user.toString());
return url;
}
html:
<form action="SpringMVC/testRequestParamPojo">
用户名:<input type="text" name="uname"/>
<br>
密码:<input type="password" name="password"/>
<br>
邮箱:<input type="text" name="email"/>
<br>
年龄:<input type="text" name="age"/>
<br>
省:<input type="text" name="addresss.province"/>
<br>
城市:<input type="text" name="addresss.city"/>
<br>
<input type="submit" value="提交">
</form>
获取 头 和 cookie
/**
* 获取请求头
* 使用@RequestHeader映射请求头 使用@RequestParam一样
* */
@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader("Accept-Language")String al) {
log("测试获取请求头 Accept-Language="+al);
return url;
}
/**
* 获取请求Cookie
* 使用@CookieValue映射Cookie 使用@RequestParam一样
* */
@RequestMapping(value="/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID")String sid) {
log("测试CookieValue JSESSIONID="+sid);
return url;
}
html:
<a href="SpringMVC/testRequestHeader">请求头</a>
<br>
<a href="SpringMVC/testCookieValue">Cookie</a>