SpringMVC对于向页面传值和获取请求参数,根据页面跳转的方式有多种方法。本节内容依然接着前一节 Spring学习(三)—— IDEA搭建maven+Spring MVC 的例子进行描述。
转发
1. 获取页面请求参数
a. 通过request对象获取参数值
b. @RequestParam注解,在形参与实参名不同时获取请求参数,使形参对应到实参
c. javabean封装获取请求参数
2. 向前端页面传值
a. request向页面传值
b. ModelAndView对象向页面传值
c. ModelMap对象向页面传值
d. session向页面传值
修改上一节 Spring学习(三)—— IDEA搭建maven+Spring MVC 中的HelloController,添加请求参数,登录成功并向页面传值等功能。
示例1. 获取页面参数
@Controller //@Controller组件将处理器纳入容器进行管理
//@RequestMapping("/login")
public class HelloController {
//@RequestMapping注解 这里映射url,告诉前端控制器访问哪个视图:http://127.0.0.1:8080/hello
@RequestMapping("toLogin")
// 登录页面
public String toLogin(HttpServletRequest request){
System.out.println("======toLogin======");
return "login";
}
// 跳转到登录成功页面,并获取form提交的请求参数
@RequestMapping("login")
// 1. 通过request对象获取参数值
public String loginSuccess(HttpServletRequest request){
System.out.println("======Login Success======");
String adminCode = request.getParameter("adminCode");
String pwd = request.getParameter("pwd");
System.out.println(adminCode+pwd);
return "success";
}
@RequestMapping("login2")
// 2. @RequestParam注解,在形参与实参名不同时获取请求参数,使形参对应到实参
public String loginSuccess2(String adminCode, @RequestParam("pwd") String password) {
System.out.println("======Login2 Success======");
System.out.println(adminCode+password);
return "success";
}
@RequestMapping("login3")
// 3. javabean封装获取请求参数
public String loginSuccess3(Admin admin){
System.out.println("======Login3 Success======");
System.out.println(admin.getAdminCode()+admin.getPwd());
return "success";
}
示例2. 向页面传值
// 跳转到登录成功页面,并向页面传值
@RequestMapping("login4")
// 1. request向页面传值
public String loginSuccess4(Admin admin, HttpServletRequest request){
System.out.println("======Login4 Success======");
String adminCode = admin.getAdminCode();
System.out.println(adminCode);
// 将数据绑定到request
request.setAttribute("adminCode", adminCode);
// springMVC默认使用转发
return "success";
}
@RequestMapping("login5")
// 2. ModelAndView对象向页面传值
public ModelAndView loginSuccess5(Admin admin, HttpServletRequest request){
System.out.println("======Login5 Success======");
String adminCode = admin.getAdminCode();
System.out.println(adminCode);
Map<String, Object> data = new HashMap<String, Object>();
// "adminCode"对应与jsp中EL表达式的"adminCode",
// 相当于request.setAttribute("adminCode", adminCode);
data.put("adminCode", adminCode);
//构造ModelAndView对象
ModelAndView mav = new ModelAndView("success", data);
// springMVC默认使用转发
return mav;
}
@RequestMapping("login6")
// 3. ModelMap对象向页面传值
public String loginSuccess6(Admin admin, ModelMap modelMap){
System.out.println("======Login6 Success======");
String adminCode = admin.getAdminCode();
System.out.println(adminCode);
//相当于request.setAttribute("adminCode", adminCode);
modelMap.addAttribute("adminCode", adminCode);
return "success";
}
@RequestMapping("login7")
// 4.session向页面传值
public String loginSuccess7(Admin admin, HttpSession session){
System.out.println("======Login7 Success======");
String adminCode = admin.getAdminCode();
System.out.println(adminCode);
//相当于request.setAttribute("adminCode", adminCode);
session.setAttribute("adminCode", adminCode);
return "success";
}
重定向
1. 返回值是String
@RequestMapping("login8")
//重定向String
public String loginSuccess8(){
System.out.println("======Login8 Success======");
return "redirect:toSuccess";
}
@RequestMapping("toSuccess")
public String toSuccess(){
System.out.println("toSuccess");
return "success";
}
2. 返回值是ModelAndView
@RequestMapping("login9")
//重定向ModelAndView
public ModelAndView loginSuccess9(){
System.out.println("======Login9 Success======");
RedirectView rv = new RedirectView("toSuccess");
return new ModelAndView(rv);
}
@RequestMapping("toSuccess")
public String toSuccess(){
System.out.println("toSuccess");
return "success";
}
注意:转发方式优先使用request方式,request生命周期短,session占用时间久。
重定向请求方式优先使用session。
总结
此处,实用图示总结一下整个登录过程的处理流程。