Spring 3.2矩阵变量是什么? - 第1部分

Spring 3.2引入了对处理“矩阵变量”的支持,并且可能像大多数开发人员一样,我从未听说过它们。 因此,经过一番研究,我对这个博客的了解是什么,以及您可以如何使用它们。 和往常一样,如果我错了,请随时纠正我。

当我第一次阅读它们时,会想到很多问题,例如:

  • 这些是什么?
  • 为什么要使用它们?
  • 为什么在Spring的家伙们认为他们很重要?
  • 为什么现在?

这些是什么?

Spring文档中介绍了Spring 3.2新增的矩阵变量。 这是指RFC3986和1996年的Tim Berners-Lee的文档 。如果您使用Google Matrix URI,则不会得到太多帮助,而在您我之间,RFC总是使用枯燥的纯文本以一种非常无聊的方式编写格式,这可能会阻止人们阅读它们。 RFC3986的相关部分是:

产生URI的应用程序通常使用段中允许的保留字符来分隔特定于方案或特定于解除引用处理程序的子组件。 例如,分号(“;”)和等号(“ =”)保留字符通常用于定界适用于该段的参数和参数值。 逗号(“,”)保留字符通常用于类似目的。 例如,一个URI生产者可能使用诸如“ name; v = 1.1”之类的段来表示对“名称”的1.1版的引用,而另一家URI生产者可能使用诸如“ name,1.1”之类的段来表示相同。 参数类型可以通过特定于方案的语义定义,但是在大多数情况下,参数的语法特定于URI的取消引用算法的实现。

由此,您可能会发现矩阵URI是将参数指定为URI一部分的一种方式。 现在,您可能会说,我已经可以使用以下形式的请求参数来做到这一点:

http://localhost:8080/myappname/mypath?var1=hello&var2=world

就矩阵URI而言,我猜这可以转换为:

http://localhost:8080/myappname/mypath;var1=hello;var2=world

那么,他们还能给你什么呢? 让我们退后一会儿,提出一个场景,我将在下一个博客中编写一些代码。 在这种情况下,我正在编写一个股票/股票投资组合应用程序,此应用程序会收到一个HTTP GET调用,该调用作为附加的全部股票名称和价格。

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70;AZN=236.0;SBRY=375.50

在此示例中,我有spring_3_2/matrixvars应用程序,该应用程序指定了三个股票名称“ BT.A”,“ AZN”和“ SBRY”及其关联的价格。 这涵盖了与上述相同的场景; 但是,库存数据不仅随价格一起提供,还包括各种可选的详细信息:价格变化,价格变化百分比等。 使用逗号“,”和分号,我们可以将此附加信息添加到URI中:

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07

上面的URI展示了矩阵URI使您能够将数据集合附加到URI的任何部分。 说集合时,您还会想到可以附加的数据是可变的,并且可以出现在URI中的任何位置。 例如,如果完成上述URI所需的数据不完整,我可以轻松编写:

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,,+3.91;AZN=236.00,+103.00;SBRY=375.50

…将其提交给我的申请仍然有效。

接下来要说明的是矩阵变量具有层次依赖性。 在上面的示例中,库存信息(例如:BT.A = 276.70,+ 3.91)与
库存 URI路径的一部分。 这意味着我可以向URI的不同部分添加不同的矩阵变量:

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,,+3.91;AZN=236.00,+103.00;SBRY=375.50/account;name=roger;number=105;location=stoke-on-trent,uk

在上面的示例中,我仍然获得了与URI的股票部分有关的股票价格信息,但是现在我还添加了一些帐户信息,通知我的应用程序:来自英国的更老的帐户(105号帐户)拥有BT。 A,AZN和SBRY在他的投资组合中。 显然,帐户信息与我的URI的account部分有关。

为什么要使用它们?

从上一节中,我认为您应该能够猜出答案。 正如Spring的伙计们所说的那样,矩阵URI或矩阵变量为您提供了一种新的方式来处理可变数量的URI参数,并能够处理使用HTTP GET传递给应用程序的数据量日益增加的复杂性。

为什么Spring家伙认为他们很重要?

现在,我无法代表Spring的家伙,但是像您一样,我可以猜测他们的想法,因此对于Spring的Guy,如果我在这里错了,请告诉我。 我想他们可能会回答这样的问题:矩阵变量增加了Spring @RequestMapping方法可以处理的URI的灵活性,从而满足了对越来越复杂和高度交互的Web应用程序的需求。 他们还巧妙地填补了Spring军械库的功能差距,使Spring与已经支持该技术的JAX-RS保持一致。

为什么现在

最后一个问题必须是“ 为什么现在”? 。 毕竟,这个想法可以追溯到1996年,那么什么使其与当今世界相关? 我想这个问题的答案在于要求网络应用程序做什么。 高度互动的页面非常流行,这些页面使用AJAX和JSON进行更新而无需全屏刷新。 JSON提供了对信息请求进行复杂回复的需求的答案,矩阵变量使您能够构建复杂的请求。 从这个意义上讲,这可能只是技术时代的到来。

我现在只需要一些代码来演示我的股票投资组合情况,但是下次再讲。

翻译自: https://www.javacodegeeks.com/2014/04/just-what-are-spring-3-2-matrix-variables-part-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

登录界面点击登录后如何延迟提示成功的div的显示时间并跳转

需求: 在登录页面点击sign in跳转到下个页面之前,我需要显示成功的窗口2秒然后自动关闭 那我们来研究下setTimeout: 关于这个setTimeout首先下面的代码实现的是两秒之后再显示SuccLogin窗体。 setTimeout(function () {$(".SuccLogin").sho…

MSN和QQ文件传输速度解析

基本上就是说msn传输文件是使用TCP,而QQ使用UDP,这就是两者传输速率的区别…… 发现很多情况下,msn传输文件比qq要慢,倒不是说msn没有快的时候,但是大部分的时候是真的比QQ慢,连我这种神经比较大条的人都注…

Java 队列清空,如何清空Actor死信队列 - java

我有一个用例,我想清空我的Akka演员的死信队列。我的本地演员与远程演员交谈,并定期向其发送一些数据。我认为这些会排队等待,因为当远程角色可用时,会发生大量事件。是否可以限制此队列的大小?甚至更好地访问它&#…

[minecraft]mcCoder制作有感

mcCoder是一个minecraft-forge-mod制作库,力图让mod制作者可以更简单的制作mod,减少mod制作者的mod制作难度。 在GitHub上关注这个项目: 原理 mcCoder主要使用,JSR 269 Pluggable Annotation Processing API,辅以使用a…

关于导入oracle10g的数据到sqlserver2005里的方案总结

由于项目需求,现需要将oracle的数据全部导入到sqlserver中,一下算是自己的总结小计吧。 sqlserver有自己的导入数据的功能,其中就有提供两种方式从oracle导入数据。 两种方式就不仔细说了,可以google到的。 遇到的问题如下&…

js文件处理File

支持File API的浏览器有IE10 ,Firefox3.5 &#xff0c;Opera10.6 &#xff0c;Safari5 ,Chrome。 1.在表单元素上<input type"fiel" name"file" id"file" />&#xff0c;可以选择一个或多个文件&#xff0c;通过获取文件元素对象的集合fi…

在IntelliJ IDEA中为不同的数据源着色

IntelliJ IDEA中的数据库插件是使用数据库中数据的有用工具。 只要我们有了JDBC驱动程序来连接数据库&#xff0c;就可以配置数据源。 然后&#xff0c;我们可以运行查询&#xff0c;检查表的内容并使用数据库工具窗口更改数据。 具有多个数据源&#xff08;例如开发和测试环境…

.NET Framework 如何:提高性能

以下编程做法可以节省内存和改善设备应用程序的性能。 使用 Windows 窗体和图形节省内存 对提供 BeginUpdate 和 EndUpdate 方法的控件使用这两种方法&#xff0c;提供这两种方法的控件包括 ComboBox、ListBox、ListView、ToolStripComboBox 和 TreeView。 重新定位控件时&…

[蓝桥杯]ALGO-185.算法训练_Trash Removal

题目描述&#xff1a; 代码如下&#xff1a; 1 #include <algorithm>2 #include <cstdio>3 #include <cstdlib>4 #include <cmath>5 #include <cstring>6 #include <iostream>7 #define INF 0x7fffffff8 using namespace std;9 10 typed…

php检测数组类型,javascript中通过哪些方法来检测数组类型?

typeof操作符。对于Function、String、Number、Undefined这几种类型的对象来说&#xff0c;不会有什么问题&#xff0c;但是针对Array的对象就没什么用途了&#xff1a;alert(typeof null); // "object"alert(typeof []); // "object"instanceof当只有一个…

值得记录的(一)

简要记录维护 jQuery 项目相关需求实现的细节&#xff0c;方便日后回顾。样式相关 flex 布局justify-content: flex-start; 和 justify-content: center;flex-wrap: wrap; 换行cursor: pointer; 手型的使用jQuery 左右移动 animate 使用 jQuery 实现左右按钮移动效果 - 类似…

跟踪异常–第4部分– Spring的邮件发件人

如果您阅读过本系列以前的任何博客&#xff0c;您可能会记得我正在开发一个小型但几乎具有工业实力的应用程序&#xff0c;该应用程序在日志文件中搜索异常。 您可能还记得&#xff0c;我现在有一个可以包含一堆结果的类&#xff0c;需要将其发送给感兴趣的任何人。 这将通过实…

从客户端...中检测到有潜在危险的 Request.Form 值

在.net中&#xff0c;Request时出现有HTML、Javascript等字符串时&#xff0c;系统会认为是危险值&#xff0c;运行显示“从客户端……中检测到有潜在危险的Request.Form值”这样的错。解决办法&#xff1a; &#xff08;1&#xff09; 在.aspx文件头中加入这句&#xff1a; …

php ci model条件查询,Laravel关系模型指定条件查询方法

对于关系模型来说&#xff0c;有时候我们需要甄别关联后结果&#xff0c;例如&#xff0c;班级和学生是一对多关联&#xff0c;我现在查询班级&#xff0c;但是想只显示正常状态&#xff0c;即状态为1的学生&#xff0c;因为有的学生从这个班级里面删除了&#xff0c;状态是4&a…

android 之 百度地图

简介 百度地图Android定位SDK为基于移动客户端开发LBS应用提供基础定位能力。 功能介绍 功能介绍&#xff1a; 地图展示&#xff1a;包括2D图、卫星图、3D图地图展示。 地图操作&#xff1a;提供控制平移、缩放、底图旋转、变换视角等地图相关操作的功能。 短串分享&#xff1a…

从javaagent迁移到JVMTI:我们的经验

当您需要从JVM内部收集数据时&#xff0c;您会发现自己很危险地接近Java虚拟机内部进行工作。 幸运的是&#xff0c;有一些方法可以避免被JVM实现细节所困扰。 Java之父没有给您提供过两个漂亮的工具供您使用。 在这篇文章中&#xff0c;我们将说明两种方法之间的差异&#xf…

浅谈HTML5中canvas中的beginPath()和closePath()的重要性

beginPath的作用很简单&#xff0c;就是开始一段新的路径&#xff0c;但在使用canvas绘图的过程中却非常重要 先来看一小段代码&#xff1a; var ctxdocument.getElementById("canvas").getContext("2d");ctx.beginPath();ctx.rect(150,150,100,100);ctx.…

HTML--HTML对象的关于位置和大小的属性的图解

转载于:https://www.cnblogs.com/duadu/archive/2007/08/08/6166687.html

flower.php,flower.php

session_start();//定义个常量&#xff0c;用来授权调用includes里面的文件define(IN_TG,flower);define(IN_JS,flower);//定义个常量&#xff0c;用来指定本页的内容define(SCRIPT,message);//引入公共文件require dirname(__FILE__)./includes/common.inc.php;//判断是否登录…

BABOK - 需求管理和沟通(Requirements Management and Communication)概要

本文更新版本已挪至 http://www.zhoujingen.cn/itbang/345.html ------------------------------------------- 描述 需求管理和沟通描述我们如何管理冲突、问题、变更&#xff0c;并确保涉众和项目团队在方案范围内保持一致。不同项目的复杂度和方法论支持都不一样&#xff0c…