• 数据处理及跳转


    1、ModelAndView

    • 设置ModelAndView对象,根据view的名称,和视图解析器跳到指定的页面
    • 页面: {视图解析器前缀} + viewName + {视图解析器后缀}

    配置视图解析器

    1. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
    2. <property name="prefix" value="/WEB-INF/jsp/"/>
    3. <property name="suffix" value=".jsp"/>
    4. bean>

    对应的controller类

    1. package com.gt.controller;
    2. import org.springframework.web.servlet.ModelAndView;
    3. import org.springframework.web.servlet.mvc.Controller;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. //只要实现了Controller接口的类,说明这就是一个控制器了
    7. public class ControllerTest1 implements Controller {
    8. public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    9. ModelAndView mv = new ModelAndView();
    10. // 添加数据
    11. mv.addObject("msg", "ControllerTest1");
    12. // 添加视图的名字 跳转到哪里
    13. mv.setViewName("test");
    14. return mv;
    15. }
    16. }

    1.1、ServletAPI

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

    1. 通过HttpServletResponse进行输出
    2. 通过HttpServletResponse实现重定向
    3. 通过HttpServletResponse实现转发

    (1)创建一个ModelTest1

    (2)对ModelTest1进行配置

    1. package com.gt.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import javax.servlet.http.HttpSession;
    7. @Controller
    8. public class ModelTest1 {
    9. @RequestMapping("/m1/t1")
    10. public String test1(HttpServletRequest request, HttpServletResponse response) {
    11. HttpSession session = request.getSession();
    12. System.out.println(session.getId());
    13. return "test";
    14. }
    15. }

    (3)运行,拿到了sessionid  

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

    • 如果有视图解析器的话,转发就直接在return写上核心位置,如果没有就需要完整的路径。
    • 重定向的话就直接redirect:/index.jsp,他会自动拼接调整,但是如果变成redirect1:/index.jsp则就会报错

    (1)先要在springmvc-servlet中注解掉视图解析器

    (2)返回/test.jsp

            转发

    1. package com.gt.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.ui.Model;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import javax.servlet.http.HttpSession;
    8. @Controller
    9. public class ModelTest1 {
    10. @RequestMapping("/m1/t1")
    11. public String test1(Model model) {
    12. model.addAttribute("msg", "ModelTest1");
    13. //转发
    14. return "forward:/WEB-INF/jsp/test.jsp";
    15. }
    16. }

     输出结果:

    重定向:

    1. package com.gt.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.ui.Model;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import javax.servlet.http.HttpSession;
    8. @Controller
    9. public class ModelTest1 {
    10. @RequestMapping("/m1/t2")
    11. public String test2(Model model) {
    12. model.addAttribute("msg", "ModelTest1");
    13. //重定向
    14. return "redirect:/index.jsp";
    15. }
    16. }

    输出结果: 

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

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

    (1)打开视图解析器

     (2)运行代码在ModelTest1中

    1. @RequestMapping("/m1/t1")
    2. public String test1(Model model) {
    3. model.addAttribute("msg", "ModelTest1");
    4. //转发
    5. return "forward:/WEB-INF/jsp/test.jsp";
    6. }
    7. @RequestMapping("/m1/t2")
    8. public String test2(Model model) {
    9. model.addAttribute("msg", "ModelTest1");
    10. //重定向
    11. return "redirect:/index.jsp";
    12. }


    2、数据处理

    2.1、处理提交数据

    1、提交的域名称和处理方法的参数名一致

    提交数据 : http://localhost:8080/hello?name=shanmu

    处理方法 :

    1. @Controller
    2. @RequestMapping("/u1")
    3. public class UserController {
    4. // http://localhost:8080/u1/t1?name=zyy
    5. @GetMapping("/t1")
    6. public String add(String name, Model model) {
    7. //1. 获取前端传的入参
    8. System.out.println("前端传的入参:" + name);
    9. //2. 将返回结果传输给前端 Model
    10. model.addAttribute("msg", name);
    11. //3. 视图跳转
    12. return "test";
    13. }
    14. }

    后台输出 : shanmu

    2、提交的域名称和处理方法的参数名不一致(这种办法比较好@RequestParam("username"))

    提交数据 : http://localhost:8080/hello?username=shanmu

    处理方法 :

    1. //@RequestParam("username") : username提交的域的名称 .
    2. @GetMapping("/t2")
  • 相关阅读:
    【实战篇】亿级高并发电商项目(电商行业的几种模式、虚拟机配置、安装 Zookeeper 、导入脚本、搭建 ego_parent )十四
    文举论金:非农到来!黄金原油全面走势分析策略独家指导
    使用Git将项目上传到GitHub(Windows+Linux双教程)【建议收藏】
    A-Level经济真题(13)
    并发编程中常见的设计模式,c++多线程如何设计
    MySQL事务原理之事务概述和隔离级别
    【PyTorch深度学习项目实战100例】—— 基于Pytorch的中文问题相似度实战 | 第72例
    Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇
    [附源码]java毕业设计旅游景点推荐系统
    frps内网穿透
  • 原文地址:https://blog.csdn.net/qq_46423017/article/details/126747969