【Spring】抽丝剥茧SpringMVC-请求间传递参数机制FlashMap

6.9.2 SessionFlashMapManager分析(FlashMapManager重定向管理) -《SSM深入解析与项目实战》 项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm 文章目录6.9.3 SessionFlashMapManager分析 6.9.3 SessionFlashMapManager分析 retrieveAndUpdate方法和saveOutputFlashMap方法的实现都是在SessionFlashMapManager的父类AbstractFlashMapManager中。下面来针对这两个方法的实现进行分析。 代码清单6- 阅读详情

源码基于SpringMVC 5.2.7版本 

FlashMap提供了一种请求间传递参数的方式,其运行机制对开发者来讲几乎透明。开发者只需在请求方法处理上添加相关类型的参数即可完成跨请求的参数传递。SpringMVC提供了一种将FlashMap存储在Session属性中的FlashMapManager-SessionFlashMapManager。SessionFlashMapManager在单体应用中有效,如果应用是以集群方式部署则由于session在跨机器间无共享,所以将失效。开发者可以实现一个支持集群场景的FlashMapManager。

FlashMap

    web项目有时候需要在一个请求中保存一些属性给接下来的其它请求使用。尤其是重定向场景,也许我们需要给目标请求传递些参数。FlashMap机制就提供了这么一种方式让一个请求传递一些参数给接下来的某个请求。当然要实现这个目的还有别的方式,FlashMap是其中一种,FlashMap机制保证了参数的隐蔽性,不需要将参数传递到前端。

public final class FlashMap extends HashMap<String, Object> implements Comparable<FlashMap> {

	@Nullable
	private String targetRequestPath;

	private final MultiValueMap<String, String> targetRequestParams = new LinkedMultiValueMap<>(4);

	private long expirationTime = -1;

    ... ...
}
  • FlashMap继承了HashMap<String, Object>,所以可以往里面添加各种String-Object的键值对 
  • targetRequestPath:指定了目标请求的路径,即符合该路径的请求才能取到此FlashMap对象
  • targetRequestParams:指定了目标请求的参数,即符合该参数的请求才能取到此FlashMap对象
  • expirationTime: 指定此FlashMap的过期时间,已经过期的FlashMap对象将移除,不会传递给目标请求

FlashMap可以指定绑定条件(targetRequestPath、targetRequestParams),只有匹配条件的请求才能取到该FlashMap对象。如果某个FlashMap没有指定绑定条件,那么紧急着那个请求将得到该FlashMap对象。

FlashMapManager

FlashMapManager是一个接口,提供了存储和提取FlashMap的接口规范。

public interface FlashMapManager {

	@Nullable
	FlashMap retrieveAndUpdate(HttpServletRequest request, HttpServletResponse response);

	void saveOutputFlashMap(FlashMap flashMap, HttpServletRequest request, HttpServletResponse response);

}
  • retrieveAndUpdate:retrieveAndUpdate做两件事情,其一是找到前面请求保存的且跟当前请求最匹配的FlashMap对象并移除,其二移除掉所有已过期的FlashMap对象
  • saveOutputFlashMap:保存FlashMap供后面的请求提取使用

SessionFlashMapManager

FlashMapManager只是接口规范,FlashMap对象保存到哪里、又从哪里提取FlashMap对象。这两点依赖具体的FlashMapManager实现类。SpringMVC提供了一个实现类org.springframework.web.servlet.support.SessionFlashMapManager。顾名思义,SessionFlashMapManager就是把FlashMap对象保存到Session中,也是从Session中提取符合条件的FlashMap对象。由于session的局限性,SessionFlashMapManager在单体应用中有效,如果应用是以集群方式部署则由于session在跨机器间无共享,所以将失效。开发者可以实现一个支持集群场景的FlashMapManager。

SessionFlashMapManager将FlashMap对象放在Session属性"org.springframework.web.servlet.support.SessionFlashMapManager.FLASH_MAPS"中

public class SessionFlashMapManager extends AbstractFlashMapManager {

	private static final String FLASH_MAPS_SESSION_ATTRIBUTE = SessionFlashMapManager.class.getName() + ".FLASH_MAPS";


	/**
	 * Retrieves saved FlashMap instances from the HTTP session, if any.
	 */
	@Override
	@SuppressWarnings("unchecked")
	@Nullable
	protected List<FlashMap> retrieveFlashMaps(HttpServletRequest request) {
		HttpSession session = request.getSession(false);
		return (session != null ? (List<FlashMap>) session.getAttribute(FLASH_MAPS_SESSION_ATTRIBUTE) : null);
	}

	/**
	 * Saves the given FlashMap instances in the HTTP session.
	 */
	@Override
	protected void updateFlashMaps(List<FlashMap> flashMaps, HttpServletRequest request, HttpServletResponse response) {
		WebUtils.setSessionAttribute(request, FLASH_MAPS_SESSION_ATTRIBUTE, (!flashMaps.isEmpty() ? flashMaps : null));
	}

    ... ...
}

FlashMap运行机制

    FlashMap的存储和提取都是SpringMVC框架自动实现的,开发者只需要使用RedirectView,请求处理的方法上添加org.springframework.web.servlet.mvc.support.RedirectAttributes的参数。将需要的属性通过RedirectAttributes#addFlashAttribute添加到RedirectAttributes参数中。

FlashMap的自动存储

存储FlashMap大致经过以下过程

1 给请求添加类型为FlashMap的属性

请求刚刚进入DispatcherServlet的时候,如果DispatcherServlet的flashMapManager不为空,则创建一个FlashMap对象挂到request的属性上,属性名为"org.springframework.web.servlet.DispatcherServlet.OUTPUT_FLASH_MAP"。源码在org.springframework.web.servlet.DispatcherServlet#doService

public class DispatcherServlet extends FrameworkServlet {
    ... ...

    protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {

		if (this.flashMapManager != null) {
			FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(request, response);
			if (inputFlashMap != null) {
				request.setAttribute(INPUT_FLASH_MAP_ATTRIBUTE, Collections.unmodifiableMap(inputFlashMap));
			}
			request.setAttribute(OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
			request.setAttribute(FLASH_MAP_MANAGER_ATTRIBUTE, this.flashMapManager);
		}

    ... ...

    }

... ...
}

2 开发者在请求的处理方法上添加RedirectAttributes类型的参数

    请求的处理方法上有RedirectAttributes类型的参数时,SpringMVC就用参数解析器org.springframework.web.servlet.mvc.method.annotation.RedirectAttributesMethodArgumentResolver给该方法传一个实际类型为org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap的对象,同时设置ModelAndViewContainer的redirectModel。RedirectAttributesMethodArgumentResolver源码如下

public class RedirectAttributesMethodArgumentResolver implements HandlerMethodArgumentResolver {
    
    ... ...

    @Override
	public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception {

		Assert.state(mavContainer != null, "RedirectAttributes argument only supported on regular handler methods");

		ModelMap redirectAttributes;
		if (binderFactory != null) {
			DataBinder dataBinder = binderFactory.createBinder(webRequest, null, DataBinder.DEFAULT_OBJECT_NAME);
			redirectAttributes = new RedirectAttributesModelMap(dataBinder);
		}
		else {
			redirectAttributes  = new RedirectAttributesModelMap();
		}
		mavContainer.setRedirectModel(redirectAttributes);
		return redirectAttributes;
	}

... ...

}

    开发只需要将要保存的属性添加通过org.springframework.web.servlet.mvc.support.RedirectAttributes#addFlashAttribute添加到参数中即可

3 HandlerAdaptor在执行完请求,将flashAttributes添加到与请求关联的FlashMap对象中

RequstMappingHandlerAdaptor处理完请求方法后,如果model是RedirectAttributes类型就会将flashAttributes加到与该请求关联的FlashMap对象中。关联的FlashMap就是DispatcherServlet在请求刚进来时创建的FlashMap对象。

public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
		implements BeanFactoryAware, InitializingBean {

... ...


    @Nullable
	private ModelAndView getModelAndView(ModelAndViewContainer mavContainer,
			ModelFactory modelFactory, NativeWebRequest webRequest) throws Exception {

        ... ...	
        
        ModelMap model = mavContainer.getModel();
        ... ...	

		if (model instanceof RedirectAttributes) {
			Map<String, ?> flashAttributes = ((RedirectAttributes) model).getFlashAttributes();
			HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
			if (request != null) {
				RequestContextUtils.getOutputFlashMap(request).putAll(flashAttributes);
			}
		}
		return mav;
	}

}

如果请求返回的view是redirect view且ModelAndViewContainer的redirectModel不为空(请求参数上有RedirectAttributes类型的参数,参数解析器就会给redirectModel赋值),ModelAndViewContainer返回的model就是RedirectAttributes类型的实例。

public class ModelAndViewContainer {
    ... ...   

    public ModelMap getModel() {
		if (useDefaultModel()) {
			return this.defaultModel;
		}
		else {
			if (this.redirectModel == null) {
				this.redirectModel = new ModelMap();
			}
			return this.redirectModel;
		}
	}
    ... ...
}

4 RedirectView在渲染的时候将请求关联的FlashMap对象存储下来

RedirectView渲染时调用org.springframework.web.servlet.support.RequestContextUtils#saveOutputFlashMap,将FlashMap存储下来

public class RedirectView extends AbstractUrlBasedView implements SmartView {
    
    ... ...

    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
			HttpServletResponse response) throws IOException {

		String targetUrl = createTargetUrl(model, request);
		targetUrl = updateTargetUrl(targetUrl, model, request, response);

		// Save flash attributes
		RequestContextUtils.saveOutputFlashMap(targetUrl, request, response);

		// Redirect
		sendRedirect(request, response, targetUrl, this.http10Compatible);
	}
    
    ... ...
}
public abstract class RequestContextUtils {

    ... ...

    public static void saveOutputFlashMap(String location, HttpServletRequest request, HttpServletResponse response) {
		FlashMap flashMap = getOutputFlashMap(request);
		if (CollectionUtils.isEmpty(flashMap)) {
			return;
		}

		UriComponents uriComponents = UriComponentsBuilder.fromUriString(location).build();
		flashMap.setTargetRequestPath(uriComponents.getPath());
		flashMap.addTargetRequestParams(uriComponents.getQueryParams());

		FlashMapManager manager = getFlashMapManager(request);
		Assert.state(manager != null, "No FlashMapManager. Is this a DispatcherServlet handled request?");
		manager.saveOutputFlashMap(flashMap, request, response);
	}
    
    ... ...
}

 

FlashMap的自动提取

1 DispatcherServlet取出FlashMap对象并关联到request属性

请求刚进来是,如果DispatcherServlet的flashMapManager不为空,则通过flashMapManager提取FlashMap对象,并关联到request的属性上,属性名为"org.springframework.web.servlet.DispatcherServlet.INPUT_FLASH_MAP"。源码在org.springframework.web.servlet.DispatcherServlet#doService

2 HandlerAdaptor调用请求处理方法前添加到model中

RequstMappingHandlerAdaptor在调用请求的处理方法前,从request属性中取出关联的FlashMap对象,并将其中的键值对初始化到model中

public class RequestMappingHandlerAdapter extends AbstractHandlerMethodAdapter
		implements BeanFactoryAware, InitializingBean {
    ... ...
	
    @Nullable
	protected ModelAndView invokeHandlerMethod(HttpServletRequest request,
			HttpServletResponse response, HandlerMethod handlerMethod) throws Exception {	
    
        ... ...
    
        ModelAndViewContainer mavContainer = new ModelAndViewContainer();
		mavContainer.addAllAttributes(RequestContextUtils.getInputFlashMap(request));

        ... ...

    }
}

3 开发者取属性

开发者只需要在请求的方式上添加Model的参数,就可以取到model里面所有的属性

示例

定义两个请求路径:/focuse/hello和/focuse/hello3。/focuse/hello添加完FlashMap的属性返回重定向视图"redirect:/focuse/hello3";/focuse/hello3取得FlashMap的属性然后返回

@Controller
@RequestMapping("/focuse")
public class DemoController {

    @RequestMapping("hello")
    public String hello(RedirectAttributes redirectAttributes, HttpServletRequest request) {

        redirectAttributes.addFlashAttribute("flashdemo", "'hello world!' from " + request.getRequestURI());

        return "redirect:/focuse/hello3";
    }

    @ResponseBody
    @RequestMapping("hello3")
    public String hello(ModelMap model) {
        return String.valueOf(model.getAttribute("flashdemo"));
    }

}

请求  /focuse/hello 重定向到 /focuse/hello3

/focuse/hello3输出了/focuse/hello保存下来的FlashMap



目录 目录

上一篇 HttpMessageConverter

下一篇 SessionAttributes机制

易智联LM401模块学习(四)——双串口收发 串口的发送和接受有三种方式,分别是阻塞发送和接收(轮询)、中断方式发送和接收、DMA方式发送和接收。这里我使用阻塞+中断的方式实现双串口通信。简单的串口收发。 阅读详情

相关推荐

Kylin V10 ARM64离线安装ffmpeg实战指南

在国产化替代浪潮下,基于银河麒麟V10和ARM架构(如飞腾、鲲鹏)的内网服务器部署音视频处理服务成为常态。由于系统默认软件源缺乏aarch64包且无法连接外网,常规yum安装方式难以奏效。本文从离线安装的通用概念出发,剖析了在Kylin V10上安装ffmpeg的三大路线及其原理,重点介绍了源码编译法,包括依赖梳理、工具链准备、编译参数配置、常见错误排查等关键环节。同时,将这套依赖管理与离线部署方法论延伸至nginx、node.js、Python库及docker等场景,帮助读者建立一套可复用的国产化系统离线

weixin_33417488的博客 147

FlashMapManager

说到FlashMapManager,就得先提一下FlashMap。 FlashMap 用于重定向Redirect 时的参数数据传递,比如,在处理用户订单提交时,为了避免重复提交,可以处理完post 请求后redirect 到一个get 请求,这个get 请求可以用来显示订单详情之类的信息。这样做虽然可以规避用户刷新重新提交表单的问题,但是在这个页面上要显示订单的信息,那这些数据从哪里去获取呢,因为redirect 重定向是没有传递参数这一功能的,如果不想把参数写进url(其实也不推荐这么做,url 有长度

Leon_Jinhai_Sun的博客 573

汽车ECU诊断入门:手把手教你用UDS协议(ISO14229)读取和清除故障码

本文详细介绍了如何使用UDS协议(ISO14229)进行汽车ECU诊断,包括故障码读取与清除的完整流程。从诊断环境搭建、UDS协议基础到实战案例分析,手把手教你掌握0x19诊断服务、安全访问机制等核心技能,适用于汽车电子工程师和诊断开发人员。

weixin_33701251的博客 450

SpringMVC RedirectAttributes 实现重定向带参数 Controller接受参数

springmvc 在3.1版本后提供了 重定向带参数,之前不知道,使用的是session重定向后又清除这个机智而又粗鲁的方法。 在知道RedirectAttributes能做这件事后,这还能忍?立马回去把代码改了,顺便发个博客/** * 页面跳转 至上传不成功excel 以及list页面 * * @return upload_unsuccessful视图 */ @GetMapping("...

Java后端 2924

基于MOS的防反接电路

防反接电路一般用于电源入口处,在电源反接时,保证电源入口之后的电路不会受到损害。一般在电源电流较小、对1V左右的压降不敏感时可以使用二极管进行防反接。防反接的形式有直接在正极串联二极管(如图1),或使用整流桥的方式(如图2),但这两种方式均存在:1、存在二极管的管压降;2、过大电流时,二极管消耗的功率大,发热严重。这两个问题。 图 1 二极管防反接电路 图 2 整流管防反接电路 1、基于NMO...

qq_42682826的博客 2万+

【AI生成】 LoRa无中心自组网实现方案

LoRa技术是一种低功耗广域网通信技术,它采用了扩频频率调制技术,能够实现远距离的传输。LoRa在物联网中具有重要的应用价值,可以支持大规模的设备连接并且具有较低的成本。同时,LoRa具有高度的抗干扰能力和适应性,能够在复杂的环境中实现稳定的通信。通过使用无中心自组网实现方案,可以进一步提高LoRa网络的灵活性和可靠性,实现设备之间的智能互联。LoRa无中心自组网实现方案将为物联网应用提供更加便捷和高效的通信解决方案。LoRa无中心自组网实现方案一、无中心自组网概念及优势。

qq_31310977的博客 2088

【实践】springboot中的重定向数据传递

2020-06-17 在写springboot项目的时候,有时候会有重定向的需求,例如登录界面登录后,就应该使用重定向来进行页面的跳转。 如果这时候使用的是转发的方式来进行页面的跳转的话,会出现两个问题: 浏览器上的路径不会改变 在主页中点击刷新时,页面会提示需要再次提交表单 因为转发是通过forward()方法提交信息在多个页面之间进行传递。 登陆后地址栏是需要变为主页地址的,而且也不应该出现刷新提示提交表单的现象,所以应该使用重定向来进行登录跳转。那么这就出现了一个问题,重定向的页面不能读取转向前通

shellhard的博客 3938

CODESYS EtherCAT通讯断了怎么办?手把手教你用ST语言写状态监测程序(附完整代码)

本文详细解析了CODESYS平台下EtherCAT通讯中断的故障排查与恢复方法,通过ST语言编写状态监测程序实现链路监测、故障隔离和伺服恢复。文章包含完整代码示例,帮助工程师快速诊断EtherCAT网络问题,提升工业自动化设备的运行稳定性。

weixin_30919571的博客 207

springmvc源码分析之FlashMapManager

FlashMap用于在页面redirect时传递参数。 FlashMap简单来说就是一个HashMap,内部使用LinkedMultiValueMap保持数据。FlashMap还保持有跳转的目标url。一个session中会保持多个FlashMap. 看一下FlashMapManager的定义 public interface FlashMapManager { ...

william的专栏 535

iPhone存储空间耗尽自救指南:从“白苹果”死锁到成功保数据刷机

本文详细介绍了iPhone存储空间耗尽导致'白苹果'死锁的解决方案,通过保留数据刷机方法成功恢复设备运行。文章分享了从失败尝试到最终成功的完整流程,包括关键操作步骤和预防措施,帮助用户在紧急情况下保住重要数据。

weixin_32578161的博客 286

PCL RANSAC拟合分割多条直线【2026最新版】

使用RANSAC算法拟合分割多条直线,输出每一条直线的拟合参数到控制台,并保存直线点云到本地文件夹。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 7974

nginx中proxy_pass中使用(/) 和不使用(/)的区别,proxy_pass中使用 ^~和不使用的区别

nginx中proxy_pass中使用(/) 和不适用(/)的区别,proxy_pass中使用 ^~和不使用的区别

qq_45003354的博客 799

STM32实战开发(121):基于STM32的智能电导率检测系统设计与实现

STM32系列是由意法半导体(STMicroelectronics)推出的32位微控制器。STM32系列基于ARM Cortex-M处理器架构,具有高性能、低功耗、丰富的外设接口和强大的开发支持库。STM32的低功耗特性使其在嵌入式系统中非常受欢迎,特别是在便携式设备和传感器网络中。

2201_76125393的博客 1041

nginx,rewrite,proxy_pass,post数据,表单

今天接到一个需求,前台要调用后台的短信发送网关:必须以post形式传递参数,并且前台的发送短信的请求的url和后台的发送短信的url不一致 前台的url为http://xxx.test.com/ajax/mobiledynamiclogincode 后台的发送短信网关的url为: http://xxx2.test.com/json/account/mobiledynamiclog

u013080278的专栏 6504

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Crossplane安全扫描集成:Trivy与Clair漏洞检测方案

Crossplane作为开源的多云资源抽象层,在管理混合云和多云环境时面临着容器安全的严峻挑战。本文将详细介绍如何通过Trivy和Clair两种主流漏洞扫描工具,为Crossplane构建完整的安全防护体系,确保基础设施即代码的全生命周期安全。 ## 📊 容器安全扫描的重要性 在云原生环境中,容器镜像的安全直接关系到整个基础设施的安全。Crossplane作为管理多云计算资源的核心工具,其自

gitblog_01080的博客 578

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

springMVC源码分析--FlashMap和FlashMapManager重定向数据保存

在上一篇博客 springMVC源码分析--页面跳转RedirectView(三)中我们看到了在RedirectView跳转时会将跳转之前的请求中的参数保存到fFlashMap中,然后通过FlashManager保存起来。protected void renderMergedOutputModel(Map model, HttpServletRequest request,

井底之蛙 5326

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

我们来了解下ModelAndViewContainer组件---------------【springmvc源码】

接着上一篇的springmvc最简单配置的解析(4)-----------【springmvc源码】,我们继续分析。 在上一篇中的render方法,其实它是最后处理请求的阶段,也就是把请求转换为视图的阶段。它主要应用到ModelAndViewContainer这个类。 ModelAndViewContainer,你可以认为是上下文容器,它主要是承担着整个请求过程中数据的传递工作,但是...

YHJ 1790

三十四、面向对象底层逻辑-SpringMVC九大组件之FlashMapManager接口设计哲学

摘要: SpringMVC的FlashMapManager机制为解决重定向(PRG模式)导致的数据传递问题提供了优雅方案。通过FlashMap暂存数据,FlashMapManager管理其生命周期,确保数据在一次重定向后安全传递并自动清理。开发者可通过RedirectAttributes接口便捷操作,默认实现SessionFlashMapManager基于Session存储,支持精准投递、一次性访问和自动过期清理。该设计兼顾轻量、安全与可扩展性,适用于分布式环境需自定义存储策略。最佳实践包括传递短消息、规范

u013883798的博客 1389

SpringMVC中的FlashMap

我们都知道,重定向时一般都是不传数据的,如果一定要传数据,只能在URL中拼接字符串来传递,但是通过拼接字符串有缺点,比如长度问题,安全问题 那有没有什么方法能做到隐藏传送呢? 答案就是SpringMVC中的FlashMap! 在SpringMVC中,每次请求都会走到DispatcherServlet的service方法中(因为重写了HttpServlet的service方法) 当进入servi...

疯狂的蜗牛 1132

Flashmap 项目常见问题解决方案

Flashmap 项目常见问题解决方案 1. 项目基础介绍与主要编程语言 项目介绍: Flashmap 是一个高效并发的哈希表实现,它提供了锁-free、部分 wait-free 和最终一致性(eventually consistent)的特性。这种哈希表对于读操作非常优化,几乎可以做到无等待(wait-free),特别适用于读多写少的场景。当写操作发生时,只有在读操作结束后开始新一轮读操作时,读...

gitblog_00353的博客 800

【稀里糊涂学springmvc】FlashMap-FlashMapManager-RedirectAttributes

场景: 要讲述本章的内容,首先要描述这样一个场景: 现在有一个注册用户的页面,如下: 填写完用户名后,点击【注册】,便会调用后台controller,保存用户名到数据库,然后跳转到hello页面,如下 这里注意地址栏,如果我们现在刷新页面,可怕的事情就会发生,此时便会又调用了一次controller保存一次用户名。 这里为了更直观一些,我把代码贴出来: @Controll...

无bug无江湖 555

SpringMVC源码分析(2):分析HandlerAdapter.handle方法,了解handler方法的调用细节以及@ModelAttribute注解

从上一篇 SpringMVC源码分析(1) 中我们了解到在DispatcherServlet.doDispatch方法中会通过 mv = ha.handle(processedRequest, response, mappedHandler.getHandler()) 这样的方式来执行request的handler方法。   先来分析一下ha.handle方法的调用过程:HandlerA

u010233323的博客 1363

SpringMVC之ViewResolver&theme&FlashMapManager

创建Spring MVC项目 project->maven->选择archetype apach...webapp; 本地安装tomcat,包括环境变量,启动后localhost:8080正常访问; endit configuration->tomcat server->tab server->application server->URL->删除默认的B..............................

qq_36851469的博客 357

SpringMVC源码-----FlashMapManager

FlashMapManager  public interface FlashMapManager { @Nullable FlashMap retrieveAndUpdate(HttpServletRequest var1, HttpServletResponse var2); void saveOutputFlashMap(FlashMap var1, HttpS...

Visonws的博客 2661

Spring Web 应用程序中的 Flash 属性指南

Web 应用程序通常依赖于用户输入来满足其多个用例。因此,表单提交是一种大量使用的机制,用于收集和处理此类应用的数据。在本教程中,我们将了解 Spring 的 flash 属性如何帮助我们安全可靠地完成表单提交工作流程。在我们可以轻松使用 flash 属性之前,我们需要对表单提交工作流程和一些关键相关概念有很好的理解。设计 Web 表单的一种天真方法是使用单个 HTTP POST 请求来处理提交并通过其响应返回确认。但是,这种设计暴露了重复处理 POST 请求的风险,以防用户最终刷新页面。为了减少重复处理的

allway2的博客 680

Spring MVC(1)-核心组件

Spring MVC是基于组件式的Web框架,一个不同的功能点都由一个不同的组件负责,这样做的好处之一就是:各个组件分工明确、相互配合完成请求的处理和响应工作。

ALONG的博客 734
上一篇: 【Spring】抽丝剥茧SpringMVC-异步请求WebAsyncManager
下一篇: 【Spring】抽丝剥茧SpringMVC-视图解析及渲染ViewResolver&View
北堂桓禧
博客等级 码龄10年 23粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值