之前的博客中也说了,mvc中数据传递是最主要的一部分,从url到Controller、从view到Controller、Controller到view以及Controller之间的数据传递。今天主要学习数据传递到Controller的几种方式.
一、从url传递
1.@RequestParam的使用
常见的url中会是?name=XXX&pwd=XXX的这种,如果想获取name,pwd,可以使用.@RequestParam。假如参数是可选参数,可以设置required=false,默认是true,value也要与url的对应。
@RequestMapping(value="/index.do") public ModelAndView login(HttpServletRequest request,HttpServletResponse response,@RequestParam("name")String name,@RequestParam(value="pwd",required=false) String pwd){ ModelAndView modelAndView = new ModelAndView("Index"); System.out.println("name:"+name+" pwd:"+pwd); return modelAndView; }
2.@PathVariable的使用
有的url的格式是url/param1/param2这种,这种获取值可以使用.@PathVariable。
@RequestMapping(value="/login/{name}/{pwd}",method=RequestMethod.GET) public ModelAndView login1(HttpServletRequest request,HttpServletResponse response,@PathVariable("name") String name,@PathVariable("pwd") String pwd){ ModelAndView modelAndView = new ModelAndView("Index"); System.out.println("name:"+name+" pwd:"+pwd); return modelAndView; }
上面两种传递值得方式也打印出了日志.第一个打印出了name,密码为null,第二种方式打印了name和pwd.
二、从view传递
这里主要用form表单演示。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <form id="form1" name="myform" method="post" action="../../login.do" > 用户:<input type="text" name="name"/> 密码:<input type="password" name="pwd"/> <input type="submit"/> </form> </body> </html>
1.直接将请求参数名作为Controller中方法的形参
这里在Controller中设置参数是页面form表单控件的name属性。
@RequestMapping(value="/login.do",method=RequestMethod.POST) public ModelAndView login2(HttpServletRequest request,HttpServletResponse response,String name,String pwd){ ModelAndView modelAndView = new ModelAndView("Index"); System.out.println("name:"+name+" pwd:"+pwd); return modelAndView; }
2.使用Pojo对象(就是封装的类,类中封装的字段作为参数)绑定请求参数值,原理是利用Set的页面反射机制找到User对象中的属性
这个使用pojo有点类似之前学的,我们可以定义一个User类,然后Controller的参数类型是User.form表单的action这里要注意下要设置成action="../../login3.do".
package com.cyw.web.model; public class User { private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
@RequestMapping(value="/login3.do") public ModelAndView login3(HttpServletRequest request,HttpServletResponse response,User user){ ModelAndView modelAndView = new ModelAndView("Index"); System.out.println("name:"+user.getName()+" pwd:"+user.getPwd()); return modelAndView; }
3.使用原生的Servlet API 作为Controller 方法的参数
不仅是通过view传到Controller,url传参数到Controller也一样.既然有HttpServletRequest,我们可以通过request对象获取相关参数。
String username=request.getParameter("name");
System.out.println("username:"+username);
三、小结
今天主要介绍了往Controller传参数的几种方法,而且参数类型都是简单的数据类型,在以后的博客中会介绍传递其他数据类型的参数以及Controller向view传递数据等内容。