#页面--->控制器
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";
}
}

最新文章

  1. Atitit 输入法原理与概论ati use
  2. python数据类型
  3. AOP 事务
  4. Effective Java 70 Document thread safety
  5. dataTable/dataSet转换成Json格式
  6. Visual studio C#语言输出调试信息到Output窗口方法
  7. 实时数据处理环境搭建flume+kafka+storm:2.flume 安装
  8. DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息
  9. (三)Python在windows上安装
  10. 建立TCP连接的三次握手
  11. WPF 自定义滚动条(ScrollView、ScrollBar)样式
  12. ButterKnife 牛油刀使用
  13. hibernate一级缓存及对象的状态
  14. nginx+uwsgi启动Django项目
  15. K1 K2作为中断源控制红色LED灯,实现任意键按一下LED灯亮或者灭
  16. 涂抹mysql笔记-管理mysql服务
  17. Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [org.jboss.netty.util.internal.ByteBufferUtil]. The following stack
  18. 关于TeeChart使用我会持续更新
  19. 0001 - Spring MVC中的注解
  20. [HTML5]移动平台的HTML5开发框架

热门文章

  1. Java通过POI读取Excel
  2. &quot;pip3 install requests&quot;
  3. [Leetcode] Template to rotate matrix
  4. leetcode 93 复原IP地址
  5. 编译snort经验
  6. Windows(华硕/联想)笔记本上安装黑苹果与win双系统教程
  7. 线程间操作无效: 从不是创建控件“button1”的线程访问它。
  8. MyBatis基础入门《十四》ResultMap子元素(association )
  9. Unity shader学习之轮廓效果
  10. protobuf编译.proto文档