文章目录

  • 1. 结果跳转方式
    • 1.1 ModelAndView
    • 1.2 ServletAPI
    • 1.3 SpringMVC
  • 2. 数据处理
    • 2.1 处理提交数据
    • 2.2 数据显示到前端

1. 结果跳转方式

1.1 ModelAndView

设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 .

页面 : {视图解析器前缀} + viewName +{视图解析器后缀}

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" />
</bean>

对应的controller类

public class ControllerTest1 implements Controller {public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {//返回一个模型视图对象ModelAndView mv = new ModelAndView();mv.addObject("msg","ControllerTest1");mv.setViewName("test");return mv;}
}

1.2 ServletAPI

通过设置ServletAPI , 不需要视图解析器 .

1、通过HttpServletResponse进行输出

2、通过HttpServletResponse实现重定向

3、通过HttpServletResponse实现转发

@Controller
public class ResultGo {@RequestMapping("/result/t1")public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException {rsp.getWriter().println("Hello,Spring BY servlet API");}@RequestMapping("/result/t2")public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException {rsp.sendRedirect("/index.jsp");}@RequestMapping("/result/t3")public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception {//转发req.setAttribute("msg","/result/t3");req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp);}}

1.3 SpringMVC

通过SpringMVC来实现转发和重定向 - 无需视图解析器;

测试前,需要将视图解析器注释掉

@Controller
public class ResultSpringMVC {@RequestMapping("/rsm/t1")public String test1(){//转发return "/index.jsp";}@RequestMapping("/rsm/t2")public String test2(){//转发二return "forward:/index.jsp";}@RequestMapping("/rsm/t3")public String test3(){//重定向return "redirect:/index.jsp";}
}

通过SpringMVC来实现转发和重定向 - 有视图解析器;

重定向 , 不需要视图解析器 , 本质就是重新请求一个新地方嘛 , 所以注意路径问题.

可以重定向到另外一个请求实现 .

@Controller
public class ResultSpringMVC2 {@RequestMapping("/rsm2/t1")public String test1(){//转发return "test";}@RequestMapping("/rsm2/t2")public String test2(){//重定向return "redirect:/index.jsp";//return "redirect:hello.do"; //hello.do为另一个请求/}}

2. 数据处理

2.1 处理提交数据

1、提交的域名称和处理方法的参数名一致
提交数据 : http://localhost:8080/springmvc_04_controller_war_exploded/t3?name=zh
处理方法:

@Controller
public class ControllerTest3 {@RequestMapping("/t3")public String test1(String name, Model model){model.addAttribute("msg",name);return "test";}
}

2、提交的域名称和处理方法的参数名不一致
提交数据 : http://localhost:8080/springmvc_04_controller_war_exploded/t3?username=zh
处理方法:

@Controller
public class ControllerTest3 {@RequestMapping("/t3")public String test1(@RequestParam("username") String name, Model model){model.addAttribute("msg",name);return "test";}
}

3、提交的是一个对象
提交数据 : http://localhost:8080/springmvc_04_controller_war_exploded/t3?id=1&name=zh&age=3
处理方法:
创建一个实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {public int id;public String name;public int age;
}
@Controller
public class ControllerTest3 {@RequestMapping("/t3")public String test1(User user, Model model){model.addAttribute("msg",user);return "test";}
}

2.2 数据显示到前端

第一种 : 通过ModelAndView

public class ControllerTest1 implements Controller {public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {//返回一个模型视图对象ModelAndView mv = new ModelAndView();mv.addObject("msg","ControllerTest1");mv.setViewName("test");return mv;}
}

第二种 : 通过ModelMap

@RequestMapping("/hello")
public String hello(@RequestParam("username") String name, ModelMap model){//封装要显示到视图中的数据//相当于req.setAttribute("name",name);model.addAttribute("name",name);System.out.println(name);return "hello";
}

第三种 : 通过Model

@RequestMapping("/ct2/hello")
public String hello(@RequestParam("username") String name, Model model){//封装要显示到视图中的数据//相当于req.setAttribute("name",name);model.addAttribute("msg",name);System.out.println(name);return "test";
}

对比

  • Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;

  • ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性;

  • ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

(SpringMVC)数据处理及跳转相关推荐

  1. SpringMVC从Controller跳转到另一个Controller

    [PK亲测] 能正常跳转的写法如下: return "forward:aaaa/bbbb.do"; return "redirect:aaaa/bbbb.do" ...

  2. SpringMVC04:数据处理及跳转

    页面跳转的方式 一.ModelAndView<.h3> 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前缀} + vi ...

  3. springMVC同时支持跳转jsp和html

    想要实现如以下效果 @Controller //RestController代表controller,但是是和ResponseBody结合 @RequestMapping("adminC&q ...

  4. springMVC session过期跳转到登录界面

    1.非ajax的传统型跳转和ajax请求数据跳转 2.使用springMVC拦截器拦截请求,判断session是否过期 3.使用ajaxSetup 全局判断session请求是否过期. 这种方式不是最 ...

  5. SpringMvc的服务器端跳转和客户端跳转

    首先,找到 package org.springframework.web.servlet.view; public class InternalResourceViewResolver extend ...

  6. SpringMVC中Controller跳转到另一个Controller方法

    1.直接Redirect后加 Controller/Action Response.Redirect("/User/Edit"); // return Redirect(" ...

  7. 基于springMVC的页面跳转、转发、重定向等

    2019独角兽企业重金招聘Python工程师标准>>> 基于from的跳转 0. 配置:自动扫描装载的controller包和视图解析器 <?xml version=" ...

  8. springmvc中action跳转

    return "redirect:/activity/listactivity.htm";

  9. 【SpringMVC 笔记】结果跳转、数据处理、乱码问题

    结果跳转和数据处理 结果跳转方式 ModelAndView Servlet API SpringMVC - 无视图解析器 SpringMVC - 有视图解析器 处理提交数据 1.提交的域名称和处理方法 ...

最新文章

  1. 小说站 章节内容 ajax,第17章 作业分析与异步编程原理——2019年5月14日22:00
  2. sqlserver字段选择参照
  3. 产业链布局优势明显,三星开启全新移动智能体验新时代
  4. Duplicate entry ‘211‘ for key ‘PRIMARY‘异常解决
  5. redis的bigkeys命令之原理
  6. 现在学前端还来得及吗?总听人说饱和了
  7. Python FastApi:post文件与数据/本地端测试
  8. 计算机原理转移指令题,转移指令计算机原理.pdf
  9. (C语言)素数是指大于1,且只能被1和它自身整除的正整数。现给定一个范围,请输出在此范围中素数的个数。
  10. 华为机试HJ74:参数解析
  11. 南非看世界杯通信问题全攻略(世界杯与通信1)
  12. Linux的i2c通讯协议
  13. php搜索区分大小写,在php中搜索不区分大小写的xpath
  14. 锋利的jQuery系列一
  15. 飞思卡尔MC9S12G系列单片机flash擦写
  16. 新版在线全网音乐搜索下载源码
  17. codesys工程ST语言学习笔记(一)建立工程与编译
  18. dev、test和prod是什么意思?
  19. 《SEM长尾搜索营销策略解密》一一1.1 做有个性的账户
  20. mysql中like与rlike_Hive中rlike,like,notlike区别及使用

热门文章

  1. 时间序列预测之一:指数平滑法(二)R语言——代码实现
  2. (chap4 IP协议) 路由控制( Routing)
  3. 区块链BaaS云服务(22)趣链BitXHub跨链平台
  4. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数匹配与重载运算符
  5. 【django】配置数据库(mysql)
  6. 如何写一篇酷炫的博文(博文列表中展现字幕)
  7. Linux和optee双系统中1020-1023号的中断号的使用
  8. Docker安装及基本使用
  9. 【网络安全】记一次接口加密测试
  10. 由PLC未授权访问引发的工程重置漏洞