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" %>
<html>
<head>
<title>index.jsp</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/data.action?name=饺子">携带数据进行页面跳转</a>
</body>
</html>
  • webapp/admin/main.jsp如下:作为请求的最终响应页面,测试在经过页面跳转后,后端放入对应作用域中的数据是否还有效
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>main.jsp</title>
</head>
<body>
<h2>显示页面跳转时携带的数据......</h2>
<!-- 在经过页面跳转后,在跳转到的页面里,尝试获取之前存放的数据-->
request: ${requestUser}<br>
httpSession: ${sessionUser}<br>
model: ${modelUser}<br>
map: ${mapUser}<br>
modelMap: ${modelMapUser}<br> <!-- 尝试直接获取请求地址中携带的参数数据-->
param: ${param.name}
</body>
</html>
  • 创建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<Object, Object> 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也可以在响应的页面中直接获取到随着前端请求携带而来的数据(携带而来的数据放在请求域中,转发是一次请求,请求域还在,自然可以获取到)

  • 当控制器中的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<Object, Object> 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域中的数据

SpringMVC 05: SpringMVC中携带数据的页面跳转的更多相关文章

  1. 解决SpringMVC拦截器中Request数据只能读取一次的问题

    解决SpringMVC拦截器中Request数据只能读取一次的问题 开发项目中,经常会直接在request中取数据,如Json数据,也经常用到@RequestBody注解,也可以直接通过request ...

  2. springmvc使用路径变量后再进行页面跳转会出现路径错误问题

    学习<Servlet.JSP和SpringMVC学习指南>遇到的一个问题,记录下. 项目代码 现象 @RequestMapping(value = "/book_edit/{id ...

  3. jQuery动态创建form表单并提交到后台(携带一定的数据进行页面跳转)

    今天遇到这么一个需求,携带一个编号一个名字跳转到另一个JSP页面,直接页面跳转(get携带数据)的话不太安全,于是想到到后台转发一下. 第一种:直接以表单提交方式的进行 JS代码: var form ...

  4. flask再学习-思考之怎么从数据库中查询数据在页面展示!

    看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...

  5. Android中实现activity的页面跳转并传值

    一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...

  6. html网页中 点击按钮页面跳转

    在html页面中 实现点击按钮页面跳转.语句如下: <input type="button" value="跳转" onClick="windo ...

  7. 微信小程序开发3之保存数据及页面跳转

    第一  保存本地数据 1.异步保存本地数据 wx.setStorage({ key:keyStr, data:dataStr, success: function(e){}, fail: functi ...

  8. sharePoint中简单的父页面跳转子页面代码!

    1,SharePoint中挺简单的一个父页面跳转到子页面的Js代码!常常用到,每次都到以前的项目中去找代码,挺麻烦! (1)父页面代码. function imgAddParentclick() { ...

  9. SpringMVC之Controller传递JSON数据到页面

    在Controller中,组装好JSON格式的数据,然后输入到页面,或者通过ajax请求在页面进行解析,都可以做到. 1.Controller /** * JSON DATA TO PAGE VEIW ...

随机推荐

  1. 软件成分分析(SCA)完全指南

    上一篇文章中,我们讨论了 DAST 的概念.重要性及其工作原理.那在开发过程中如何查找开源软件包中的漏洞并学习如何修复?本指南带你一起了解 SCA 工具及其最佳实践. 如今,绝大多数代码驱动的应用程序 ...

  2. 程序员必备,一款让你提高工作效率N倍的神器uTools

    下载地址:https://www.aliyundrive.com/s/f7PU7QxdxEz uTools 是什么? uTools = your tools(你的工具集) uTools 是一个极简.插 ...

  3. java程序使用ssl证书连接mysql

    1. 在mysql服务器上生成证书 openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3600 -key ...

  4. 使用Visio 2007画用例图没有include(包含)关系且包含关系使用的线不是虚线的解决办法

    使用Visio 2007画用例图没有include(包含)关系且包含关系使用的线不是虚线的解决办法 1 在工具栏选择UML------>选择构造型 如下操作 2 拖动 "扩展" ...

  5. Zabbix 5.0:通过LLD方式自动化监控阿里云RDS

    Blog:博客园 个人 之前做了RDS监控,由于 RDS 实例梳理增多,手动添加的方式已经不够效率,故改为LLD(Low-level discovery)方式做监控. 什么是LLD LLD(Low-l ...

  6. static 和 final(java)

    static: 1.1static修饰成员变量: 使用static修饰的成员变量不在对象的数据结构,而是类的基本信息(参数) 使用static修饰的成员可以直接使用,类名.成员的方式访问,而不需要再n ...

  7. 发现Mapstruct的一个bug

    前言 在一次需求的开发过程中,发现一个对象插入数据库时某个字段总是为空.简化后的代码如下: @Autowired private PersonService personService; public ...

  8. javaWeb,web服务器

    一. 1.ASP 国内最早最流行的语言就是ASP:微软研发 在HTML中嵌套了VB脚本,ASP+COM(网页元素) 在ASP开发中,基本一个业务就有几千行代码,页面机器混乱 维护成本高 <h1& ...

  9. APISpace 尾号限行API接口 免费好用

    尾号限行是一种为了缓解城市交通压力而催生的交通制度,措施实施以后对城市交通拥堵起到缓解作用.每个地区的尾号限行规定都有所不同,具体的以当地的为准.   尾号限行API,提供已知所有执行限行政策的共计6 ...

  10. NOI / 2.1基本算法之枚举-8759:火车上的人数

    8759:火车上的人数​​​​​​ 总时间限制: 1000ms 内存限制: 65536kB 描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下 ...