• SpringMVC 05: SpringMVC中携带数据的页面跳转


    SpringMVC默认的参数对象

    • SpringMVC默认的参数对象是指,不用再另行创建,相当于SpringMVC内置对象,可以直接声明并使用
    • 默认的参数对象有:HttpServletRequest,HttpServletResponse,HttpSession,Model,Map,ModelMap
    • 注意:Model,Map,ModelMap和HttpServletRequest对象一样都使用请求作用域,所以在页面跳转时,只可以采用转发方式
    • 如果要采用重定向的方式完成页面跳转而且还要保证数据传递的正确性,只能使用HttpSession

    进行携带数据的页面跳转

    • SpringMVC的项目配置和前面SpringMVC博集中(指SpringMVC 02)配置相同
    • webapp/index.jsp:网站的首页,用来向后端发送一个简单的携带数据的get请求
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        index.jsp
    
    
    "${pageContext.request.contextPath}/data.action?name=饺子">携带数据进行页面跳转
    
    
    
    • webapp/admin/main.jsp如下:作为请求的最终响应页面,测试在经过页面跳转后,后端放入对应作用域中的数据是否还有效
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        main.jsp
    
    
    

    显示页面跳转时携带的数据......

    request: ${requestUser}
    httpSession: ${sessionUser}
    model: ${modelUser}
    map: ${mapUser}
    modelMap: ${modelMapUser}
    param: ${param.name}
    • 创建SpringMVC控制器:DataAction。在控制器的action方法中利用SpringMVC内置对象,将数据存放到相应作用域中
    package com.example.controller;
    
    import com.example.pojo.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.util.Map;
    
    @Controller
    public class DataAction {
        @RequestMapping("/data")
        //这几个参数都是SpringMVC内置的,可以直接声明使用
        public String data(HttpServletRequest request, HttpSession httpSession, Model model, Map map, ModelMap modelMap){
            
            //User实体类含有两个属性:name(String), age(int)。无参构造方法。全属性的有参构造方法,getter,setter,toString方法
            User user = new User("荷包蛋", 20);
            //将user对象利用各SpringMVC内置对象存放到相应作用域中
            request.setAttribute("requestUser", user);
            httpSession.setAttribute("sessionUser", user);
            model.addAttribute("modelUser", user);
            map.put("mapUser", user);
            modelMap.addAttribute("modelMapUser", user);
            //最后完成页面转发跳转
            return "main";
        }
    }
    
    • 当控制器中的action方法以转发的方式跳转到webapp/admin/main.jsp页面时
    • 部署并启动tomcat进行测试
    • 网站首页(left),响应页面(right):可见对于放入相应作用域中的数据,在经过页面转发跳转后仍然可以获取到之前存放的数据
    • 而且对于param也可以在响应的页面中直接获取到随着前端请求携带而来的数据(携带而来的数据放在请求域中,转发是一次请求,请求域还在,自然可以获取到)

    image

    • 当控制器中的action方法以重定向的方式跳转到webapp/admin/main.jsp页面时
    package com.example.controller;
    
    import com.example.pojo.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.util.Map;
    
    @Controller
    public class DataAction {
        @RequestMapping("/data")
        public String data(HttpServletRequest request, HttpSession httpSession, Model model, Map map, ModelMap modelMap){
            User user = new User("荷包蛋", 20);
            request.setAttribute("requestUser", user);
            httpSession.setAttribute("sessionUser", user);
            model.addAttribute("modelUser", user);
            map.put("mapUser", user);
            modelMap.addAttribute("modelMapUser", user);
            
            //最后完成页面的重定向跳转
            return "redirect:/admin/main.jsp";
        }
    }
    
    • 网站首页(left),响应页面(right):可见对于放入相应作用域中的数据,在经过页面重定向跳转后只有session域中可以获取到之前存放的数据
    • 因为本例中的重定向是两次请求,凡是放在第一次请求域中的数据,在第二次请求发起后,之前存放的数据对于第二次请求来说已经失效,无法访问原来存放的数据,而由于浏览器并未关闭,则session域仍然有效,可以正确获取之前存放在session域中的数据

    image

  • 相关阅读:
    yolov5训练可视化指标的含义
    Redis——(7)redis作为mybatis缓存整合&二级缓存的整合
    php laravel
    UNITY性能优化☀️二、如何优化GC,达到提升流畅度的目的
    Horizontal Pod Autoscaler(HPA)
    MATLAB 嵌套switch语句
    车载充电器ROHS认证测试项目和周期
    编程题练习@9-7
    AVX | 关于RC电路耦合、相移、滤波、微分、积分的那些事儿~
    ora-15025 ora-27041问题处理
  • 原文地址:https://www.cnblogs.com/nefu-wangxun/p/16650370.html