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

springMVC之一(页面<--->控制器 互相传值,转发和重定向)的更多相关文章

  1. SpringMVC 转发、重定向

    转发.重定向到其它业务方法 @org.springframework.stereotype.Controller @RequestMapping("/userController" ...

  2. 【drp 12】再识转发和重定向:SpringMVC无法跳转页面

    最近再使用SpringMVC进行页面跳转的时候,不知道发生了什么,始终都无法正确跳转.后来问题解决了,发现是对于转发和重定向没有能很好的理解,以此写篇博客,权当做积累了! 声明:本博客的所有代码,均为 ...

  3. SpringMVC:前台jsp页面和后台传值

    前台jsp页面和后台传值的几种方式: 不用SpringMVC自带的标签 前台---->后台,通过表单传递数据(): 1.jsp页面代码如下,  modelattribute 有没有都行 < ...

  4. springMVC中接收请求参数&&数据转发

    ### 1. 接收请求参数 #### 1.1. [不推荐] 通过HttpServletRequest获取请求参数 假设存在: <form action="handle_login.do ...

  5. SpringMVC与请求控制器

    MVC设计模式 视图(View)      -对应组件:JSP或者HTML文件 控制器(controller) -对应组件:Servlet 模型(Model)   -对应组件:JavaBean MVC ...

  6. springmvc 中controller与jsp传值

    参考:springmvc 中controller与jsp传值 springMVC:将controller中数据传递到jsp页面 jsp中,死活拿不到controller中的变量. 花了半天,网上列出各 ...

  7. http页面转发和重定向的区别

    一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下:request.getRequestDispatcher("new.jsp").forward(request ...

  8. SpringMVC转发和重定向区别!

    在servlet中,转发和重定向是由request和response完成的.两者之间的区别请看我之前的文章.那么在springMVC中是如何完成的呢? /**转发**/ @RequestMapping ...

  9. MVC中控制器向视图传值的四种方式

    MVC中的控制器向视图传值有四种方式分别是 1 ViewDate  2.ViewBag   3.TempDate  4.Model 下面分别介绍四种传值方式 首先先显示出控制器中的代码 using S ...

随机推荐

  1. 【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)

    在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...

  2. [py]数据结构和算法-冒泡排序

    用Python实现的数据结构与算法 数据结构和算法可以培养一个人的逻辑思维(推荐几本书) 逻辑思维培养 严蔚敏的数据结构(排序 查找 列表 堆栈 队列 树的简单部分) 大话数据结构 数据结构与算法分析 ...

  3. linux iscsi挂载与卸载

    iscsiadm -m discovery -t sendtargets -p 192.168.4.245:3260 #扫描ISCSI Target 列出所有LUN iscsiadm -m node ...

  4. js--script和link中的 integrity 属性

    <link crossorigin="anonymous" integrity="sha256-+hDz/gVbhp24mhOmoIT4Du4F3K5fs9fjjo ...

  5. sublime使用经验汇总

    1. source insight 会对某个修改频繁的文件做多次备份.我们用sublime进行多个文件搜索时,需要把备份的文件排除在外. e:\work\code\sourcev, *.h, *.cp ...

  6. 编译用到boost相关的东西,问题的解决;以及和googletest库

    编译https://github.com/RAttab/reflect, 发现需要gcc4.7以上的版本才行.于是编译安装最新的gcc-6.2.0, 过程算顺利. http://www.linuxfr ...

  7. iOS 添加启动图片

    之前添加启动图片,一直都是通过添加LaunchImage来实现,见链接 http://www.cnblogs.com/jys509/p/4856068.html 这种方法,就需要给每个尺寸添加图片. ...

  8. cocos2d-x JS 利用重复动作实现动画播放(实现倒计时)

    cocos2d-js: cc.delayTime() and cc.repeatForever() don't work together in cc.sequence() this.numm = 1 ...

  9. 一步一步学Python(3) 基础补充

    最近在系统学习Python,以MOOC上面的一套Python3的课程为基础.本文主要总结一下基础部分的关键点. 1.python基本数据类型 2.python运算符 3.构建简洁高效的IDE环境 4. ...

  10. python入门第二篇

    整体注释:ctrl+? 1.运算符 +  -  *  /   //(取商) **(幂) %(求余) 判断某个东西是否在某个东西里面包含:  in           not in 不等于: <& ...