这里整理一下Spring框架下,如何获取页面参数,以及如何将后台数据传到页面,最后是了解重定向的使用。前期的配置参考文末第一篇博文,这里添加一个登陆的界面,用于测试向页面传递参数,以及登陆完成后结果界面两个(成功界面和失败界面),其他就是添加一个控制器,往里面添加方法进行测试了。
测试页面准备
登陆界面
1 <%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> 2 <!-- 通过httpServletRequest的方式获取页面参数 --> 3 <!-- <form action="loginOK.do" method="GET" />--> 4 <!-- 测试通过注解方式提交 --> 5 <!-- <form action="loginOK_annotation.do" method="GET"> --> 6 <!-- 通过javabean的方式 --> 7 <!-- <form action="loginOK_javabean.do" method="GET"> --> 8 <!-- 向页面传值测试 --> 9 <!-- <form action="loginOK_param.do" method="GET">--> 10 <!-- 使用ModelAndView向页面传值 --> 11 <!-- form action="loginOK_ModelAndView.do" method="GET">--> 12 <!-- 使用ModelMap向页面传值 --> 13 <!-- <form action="loginOK_ModelMap.do" method="GET">--> 14 <!-- 使用session向页面传值 --> 15 <!-- <form action="loginOK_session.do" method="GET">--> 16 <!-- 如果方法的返回值是String,重定向写法 --> 17 <!-- form action="loginOK_redirect_str.do" method="GET">--> 18 <!-- 如果方法的返回值是ModelAndView,则需要先创建RedirectView,然后创建ModelAndView --> 19 <!-- <form action="loginOK_redirect_mm.do" method="GET"> --> 20 <input type="text" name="user"/>用户名 <br/> 21 <input type="password" name="pwd" />密码 <br/> 22 <button>登录</button> 23 </form>
登陆成功界面
1 <%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> 2 <h1>欢迎登陆</h1><br/> 3 <!-- 得到服务器返回的user参数,采用el表达式获取 --> 4 ${user }
登陆失败界面
1 <%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> 2 <h1>登陆失败</h1>
获取页面参数
方式1:通过request来获得,在前端控制器方法里添加HttpServletRequest类型的参数request,通过java反射机制,在调用方法前会检查参数类型,从而将request传入到服务器,可以获取request里面的参数
1 /** 2 *登录检查 3 * @return 4 */ 5 @RequestMapping("/login.do") 6 public String login() { 7 System.out.println("跳转到登陆页面"); 8 return "login"; 9 10 } 11 /** 12 * 获取页面参数值,进行登陆检查 13 * 登录时如何获取浏览器发送给服务器的参数呢,可以在logincheck里加参数HttpServletRequest 14 * DispatcherServlet前端控制器在调用处理器方法之前,会利用java反射机制分析方法的结构,如下方法 15 * 会通过分析,将request对象传过来 16 * @return 17 */ 18 @RequestMapping("/loginOK.do") 19 public String logincheck(HttpServletRequest request) { 20 System.out.println("使用httpServletRequest的方式获取"); 21 String name=request.getParameter("user"); 22 String pwd=request.getParameter("pwd"); 23 System.out.println("name是:"+name); 24 System.out.println("pwd是:"+pwd); 25 //模拟DAO检查数据库 26 loginDAO DAO=new loginDAO(); 27 int result=DAO.loginCheck(); 28 if(result>0) { 29 return "loginOK"; 30 }else { 31 return "loginNG"; 32 } 33 }
测试结果
控制台
方式2:通过@RequestParam注解的方式,适合少量请求参数
1 /** 2 * 通过注解方式获取参数,适合少量参数 3 * @return 4 */ 5 @RequestMapping("/loginOK_annotation.do") 6 /* 7 * JSP表单提交给服务器时,DispatherServlet在方法执行之前扫描里面的参数,发现有和JSP表单中同名的 8 * user和pwd,这样会调用request.getParameter("user")和request.getParameter("pwd")方法 9 * 得到参数。如果user和pwd和JSP表单中写的不一样怎么办?可以通过加注解@RequestParam("")来解决 10 * 如下,表单中提交的是pwd对应的参数,在注解里加上pwd即可 11 * 12 * 建议参数前加上注解@RequestParam 13 */ 14 public String login_annotation(String user,@RequestParam("pwd") String password) { 15 System.out.println("通过注解的方式获取参数"); 16 System.out.println("用户名是:"+user); 17 System.out.println("密码是:"+password); 18 return "loginOK"; 19 }
测试结果
控制台
方式3:将要请求的参数封装成javabean,适合大量请求参数,这里写一个javabean。
javabean
1 package Controller; 2 /** 3 * 用于封装请求参数值的类,属性名和请求参数名一致,类型要匹配,并提供参数get set方法 4 * (如果类型不一样,会自动做类型转换,比如将string类型自动转化为int类型) 5 * 6 * @author yangchaolin 7 * 8 */ 9 public class userParam { 10 private String user; 11 private String pwd; 12 private int age; 13 //get set方法 14 public int getAge() { 15 return age; 16 } 17 public void setAge(int age) { 18 this.age = age; 19 } 20 public String getUser() { 21 return user; 22 } 23 public void setUser(String user) { 24 this.user = user; 25 } 26 public String getPwd() { 27 return pwd; 28 } 29 public void setPwd(String pwd) { 30 this.pwd = pwd; 31 } 32 }