Spring MVC 工作流程(如何获取请求参数,如何向页面传值)
1、Spring MVC 工作流程
(1)浏览器发出一个HTTP工作请求
(2)请求进入DispactherServlet主控制器
(3)主控制器调用HandlerMapping组件根据请求找映射的Controller处理
(4)执行Controller处理方法,将返回结果给ViewResolver组件
(5)ViewResolver组件根据Controller返回结果定位视图jsp,将模型数据传递给jsp
(6)由jsp生成我们的一个响应结果
2、Spring MVC开发过程
略
3、如何接收请求参数
(1)方法参数(参数名字与请求key保持一致就行)
例如:在我们的登录页面表单名称如下:
我们的Controller就可以设计成这样:
@RequestMapping("handlerLogin.do") public ModelAndView handleLogin(String username,String password){ ModelAndView mav = new ModelAndView(); System.out.println("username:"+username); System.out.println("password:"+password); if(username.equals("zlc")&&password.equals("123")) { mav.setViewName("success"); } else { mav.setViewName("login"); } return mav; }
参数名字与请求key保持一致,就可以获取到请求参数的值了。
运行结果如下:
(2)方法参数(实体对象),我们可以使用实体对象,实体对象的属性与请求参数的key保持一致就行
例如:我们定义一个User实体对象
public class User { 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; } }
Controller方法改成这样:
@RequestMapping("handlerLogin.do") public ModelAndView handleLogin(User user){ ModelAndView mav = new ModelAndView(); System.out.println("username:"+user.getUsername()); System.out.println("password:"+user.getPassword()); mav.setViewName("login"); return mav; }
这样同样可以获取请求参数值。
注意:(1)这种应用场景下,User实体类加不加@Component之类的注解都可以,不一定要spring将其扫入容器中
(2)这种应用场景下,User必须得有setter方法和一个无参数的构造方法
(3)方法参数(Request对象),这样就可以使用request.getParameter("")这样获取值了
(4)
4、如何向页面传值
(1)使用ModelAndView对象,将要传往页面的值,放在ModelAndView中,或者放在ModelMap中,例如:
//添加请求映射 @RequestMapping("/hello.do") public String execute(ModelMap m) { m.put("msg", "测试"); return "hello"; }
(2)利用传统的request,response,session等进行页面传值
(3)使用ajax,传递json数据
5、如何使用session
在方法参数中添加HttpSession参数即可