前面聊过了SpringMVC,以及通过实例演示了SpringMVC如何搭建,如果对环境搭建不太了解的话,可以看一下前面的文章(下面演示的例子,环境都是通过上面的例子进行演示的):传送阵
在使用javaweb项目原生是servlet中,对应请求地址,返回的数据的页面之前都是在web.xml,新版本可以通过注解进行配置了。需要了解servlet可以看一下前面的文章:传送阵
获得参数
原生ServletAPI
其实这个说是原生,其实还是SpringMVC进行的一些简单包装处理。
还是老规矩先来例子:
@Controller
@RequestMapping(value = "/test" )
public class controller {
@RequestMapping("/a")
public String test(HttpServletRequest request){
System.out.println(" ======="+request);
System.out.println(" ======="+request.getMethod());
return "index";
}
}
访问地址:
http://localhost:8080/testSpringMVC_war/test/a?username=张三
然后看一下后台结果
因为springMVC如果方法带有HttpServletRequest的参数,会直接将其赋值,然后可以在方法种使用这个servletAPI的一些方法,不过不太建议,毕竟已经开始使用框架了,还使用之前的API,几乎没用什么意义。
直接形参
这个是springMVC的框架得到参数的方法方式
请求参数 和 形式参数名字相同
如果映射的方法中形参和url参数名一样的话,可以直接使用的,用例子演示:
@Controller
@RequestMapping(value = "/test" )
public class controller {
@RequestMapping("/a")
public String test(String username){
System.out.println(" ======="+username );
return "index";
}
}
然后访问地址:http://localhost:8080/testSpringMVC_war/test/a?username=张三
请求参数 和 形式参数名字不相同
如果请求参数和形参不一样的话,自然也有可以处理的方式,这个需要使用的注解@RequestParam
@RequestParam 也有常用的三个属性
value:这个时表示url中参数的值
defaultValue: url参数默认值
required 这个属性值为布尔值, 为false的时候,且未获取到参数,则使用 defaultValue.
还是来一个例子演示:
@Controller
@RequestMapping(value = "/test" )
public class controller {
@RequestMapping("/a")
public String test(@RequestParam(value = "user",required=true) String username,@RequestParam( value = "pwd",required = false,defaultValue = "123456") String password){
System.out.println(" ======="+username+"======"+ password );
return "index";
}
}
然后访问地址:http://localhost:8080/testSpringMVC_war/test/a?user=张三&psd=111111
补充—可以直接参数封装为对象(POJO)
这个是有一个前提,那就是对象的属性名,和请求参数的名字一致。不管是 GET 或 POST 的x-www-urlencode 均可。
首先创建一个对象:
package com.xzd.dome;
public class User {
String username;
String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
@Controller
@RequestMapping(value = "/test" )
public class controller {
@RequestMapping("/a")
public String test(User user){
// System.out.println(" ======="+username+"======"+ password );
System.out.println(user);
return "index";
}
}
地址:http://localhost:8080/testSpringMVC_war/test/a?user=张三
这个是故意写一个属性值,来测试一下,是否会使用默认值。看一下结果:
注意:对象类中,如果没有带有参数的构造方法,或者set方法就不会自动封装。
封装成Map
有时候传递的参数很多,有没有对应的类,同时不想在映射的方法中放置很多形参,那么可以捡起封装为Map。需要使用的一个注解是:@RequestParam。无论是GET/POST 都是可以的。
来例子演示:
@Controller
@RequestMapping(value = "/test" )
public class controller {
@RequestMapping("/a")
public String test(@RequestParam Map<String,String> map){
System.out.println(map);
return "index";
}
}
然后请求地址:http://localhost:8080/testSpringMVC_war/test/a?username=张三&psw=1234&sex=男
看一下后台结果:
获得请求参数
RequestHeader
这个使用对道了注解@RequestHeader。如果请求头不知道有什么东西,可以看前面的文章:传送阵
@RequestHeader 也有常用的三个属性
value:这个时表示请求头中参数的值
defaultValue: 请求头默认值
required 这个属性值为布尔值, 为false的时候,且未获取到参数,则使用 defaultValue.
还是老规矩来一个例子:
@Controller
@RequestMapping(value = "/test" )
public class controller {
@RequestMapping("/a")
public String test(@RequestHeader("Cookie") String cookie){
System.out.println("cookie="+cookie);
return "index";
}
}
访问地址:http://localhost:8080/testSpringMVC_war/test/a
CookieValue
还有一个注解是处理cookie的,因为cookie中有可能会含有很多键值对,所以通过这个注解可以得到,而不像是RequestHeader得到所有的键值对。
@CookieValue 也有常用的三个属性
value:这个时表示cookie中参数的值
defaultValue: cookie默认值
required 这个属性值为布尔值, 为false的时候,且未获取到参数,则使用 defaultValue.
来一个例子:
@Controller
@RequestMapping(value = "/test" )
public class controller {
@RequestMapping("/a")
public String test(@CookieValue(value = "JSESSIONID") String jsessionId){
System.out.println("JSESSIONID="+jsessionId);
return "index";
}
}
访问地址:http://localhost:8080/testSpringMVC_war/test/a