请求路径哪家强,@RequestMapping强强强。
请求参数哪家强,自己往下看!!!
1. @PathVariable
@RequestMapping("/mvc")
// 在类的前面添加Controller注解,表示是spring的控制器
@Controller
public class HelloWorld {
// 请求url地址映射 @RequestMapping 是用于匹配请求的路径
@RequestMapping("/hello/{id}")
public String hello(@PathVariable(value="id") Integer value){
System.out.println(value);
// 通过prefix+returnVal+suffix 这样的方式得到实际的物理视图,然后会转发操作
return "success";
}
}
我们在url中直接输入http://localhost:8080/spring/mvc/hello/6
通过@PathVariable可以将URL中占位符的参数绑定到controller处理方法的入参中。这样就能得到id=6了。
- 上面是
public String hello(@PathVariable(value="id") Integer value)
- 这样也可以
public String hello(@PathVariable Integer id)
- 还可以这样
public String hello(@PathVariable("id") Integer value)
以上三种方法都可以取到值。不要乱写,可能会出现500的错误。
2. @RequestParam
该注解也是用来获取请求参数的。那么该注解和@PathVariable有何不同呢? 还是看例子:
@RequestMapping("/hello")
public String hello(@RequestParam String name){
System.out.println(name);
return "success";
}
我们在url中直接输入:http://localhost:8080/spring/mvc/hello?name=“1234”
看到这里,你大概已经明白了@PathVariable和@RequestParam之间的一些区别了吧,对于像“spring/hello/1”这样的请求,我们通过@PathVariable来绑定请求的参数;而对于类似“spring/hello?username=1234”这样的请求参数是以键值对出现的,我们通过@RequestParam来获取到如username或age后的具体请求值。
但是我如果不传name尼?url写成http://localhost:8080/spring/mvc/hello会出现什么?name的值是null?
难道必须传name这个参数吗?肯定不是。我们只需要加上required = false
public String hello(@RequestParam(required = false) String name)
改为这样就可以了,name的值是null。
3.表单提交-字段较少
先写jsp:
<form method="post" action="/spring/login">
用户名:<input type="text" name="userName"/>
<button >Login</button>
我们用post方法提交,不要把信息暴露在url上。我们要提交的是用户名这个字段,并在后台取值。
看java代码:
@RequestMapping("/login")
public String login(String userName){
System.out.println(userName);
return "index";
}
就这么简单,我们就可以取到画面上的值了,表单中input的name值和Controller的参数变量名保持一致,就能完成数据绑定,如果不一致可以使用@RequestParam注解。
4.表单提交-pojo
上面那种方法适用于字段较少的情况,要是有十个八个字段难道我们还要在参数中一个一个列举出来吗?
肯定没有那么笨,我们就来传个object试试。
首先定义一个需要的参数对象:
public class UserLogin {
private String userName;
private String 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;
}
}
在改一下我们的jsp:
<form method="post" action="/spring/login">
用户名:<input type="text" name="userName"/><br/>
密码:<input type="text" name="password"><br/>
<button >Login</button>
让我们输入值提交表单看看,
那么后台取到值了吗?
看来没什么技术含量啊,只需将对象的属性名和input的name值一一匹配即可。
我们再来看一种写法:
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
同样这也是可以取值的,看你个人喜好了。