第三章 获取请求参数值-跟赵大笨笨学SpringMVC

来源:互联网 发布:windows字体大小设置 编辑:程序博客网 时间:2024/06/17 16:14

请求路径哪家强,@RequestMapping强强强。
请求参数哪家强,自己往下看!!!

1. @PathVariable

@RequestMapping("/mvc")// 在类的前面添加Controller注解,表示是spring的控制器@Controllerpublic 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请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
同样这也是可以取值的,看你个人喜好了。

原创粉丝点击