#页面--->控制器
1.request:不建议使用
2.使用属性传值(建议使用)@RequestParam("name") String username
3.使用Bean对象传值(适合数据量大)
#控制--->页面request,session(cookie),application
1.request,session传递数据到页面
2.ModelAndView:Model--->ModelMap--->Map
3.ModelMap(推荐使用)
#重定向和转发
1.重定向的原理:response.sendRedirect("showDemo.do")
2.转发的原理:
request.getRequestDispatcher("/WEB-INF/web/ok.jsp")
3.当视图解析器解析到forward或redirect两个前缀,执行以上代码,否则实现字符串的拼接
开发步骤:
1.新建maven工程
1)添加web.xml
2)添加tomcat运行环境
3)添加依赖jar spring-webmvc
4)添加spring-mvc.xml
5)web.xml中配置前端控制器
6)spring-mvc.xml配置视图解析器
2.定义demo.jsp页面
<form action="" method="get"> 姓名:<input type="text" name="name"/><br> 年龄:<input type="text" name="age"/><br> <input type="submit" value="提交"/> </form>
3.定义控制器DemoController
@Controller @RequestMapping("/demo") public class DemoController{ //显示demo.jsp @RequestMapping("/showDemo.do") public String showDemo(){ return "demo"; } }
4.页面--->控制器传值
//2.使用属性传值
//特点: 1)参数列表的名称和表单的name属性值相同
2)可以实现自动类型转换,但是可能会有异常
3)表单数据量小
@RequestMapping("/test2.do") public String test2(String name,Integer age){ System.out.println(name+","+age); return "ok"; }
//3.属性传值(表单name属性值和参数列表变量名不同)
//使用@RequestParam注解辅助完成变量的赋值
// @RequestParam("name")中的name在页面上不存在
@RequestMapping("/test3.do") public String test3( @RequestParam("name") String username, Integer age){ System.out.println(username+","+age); return "ok"; }
//4.Bean对象传值
//特点:把表单name属性值封装成类类型;
// 成员变量名称必须表单的name属性值相同
// 适合数据量大的参数传递值
@RequestMapping("/test4.do") public String test4(User user){ System.out.println(user.getName()+","+user.getAge()); return "ok"; }
5.控制器--->页面传值
//5.使用request,session从控制器向页面传值
//
@RequestMapping("test5.do") public String test5(HttpServletRequest request, HttpSession session){ request.setAttribute("name","admin"); session.setAttribute("age","18"); return "ok"; }
//6.ModelAndView传值
//特点:框架Map属性获取到,设置request对象中
//@RequestMapping("/test6.do")
public ModelAndView test6(){ Map<String,Object> map=new HashMap<String,Object>(); map.put("address","中鼎7层"); ModelAndView mv=new ModelAndView("ok",map); return mv; }
6.请求转发和重定向
//需求:控制器接收到name,如果name=admin,表示登录成功
// 响应页面ok.jsp(转发)
// 如果name!=admin,表示登录失败。
// 响应页面demo.jsp(重定向)
// 8.1重定向的原理:
// response.sendRedirect("showDemo.do");
// 转发的原理:
// request.getRequestDispatcher("/WEB-INF/web/ok.jsp").forword (resquest,response);
//
@RequestMapping("/test8.do) public String test8(String name,ModelMap map){ if(name.equals("admin")){ map.addAttribute("success","登录成功!"); } else{ return "redirect:showDemo.do"; } }
原文地址:https://www.cnblogs.com/shijinglu2018/p/9576492.html