Spring MVC,Ajax和JSON第1部分–设置场景

我一直在考虑在Spring,Ajax和JSON上写博客,但是我从来没有做过。 这主要是因为它非常复杂,并且所需的技术一直处于变化状态。 当我决定撰写此博客时,我在Internet上有一个侦察员,如果您查看诸如Stack Overflow之类的地方,您会看到许多不同且通常相互矛盾的答案,这些问题是“我如何编写Spring Ajax / JSON应用程序? ” 我认为这是Spring专家的错,因为他们一直在忙于改善Spring对JSon的支持。 不仅是JQuery的专家们也很忙,这意味着在过去的几年中,总体情况发生了巨大变化,并且给出了“如何编写Spring Ajax / JSON应用程序”的答案。 已经过时了。

如果查看Keith Donald的原始Spring 3 MVC Ajax应用程序,您会发现它非常复杂。 支持JSON集成需要大量的样板代码和一些怪异JavaScript。 在最新版的Spring中,所有更改都已完成。 正如我所说的,Spring和JQuery的Guy一直很忙,现在事情变得简单得多。 编写此类应用程序时,需要考虑一些步骤。 首先,您需要将能够发出Ajax请求的页面加载到浏览器中。 其次,您必须编写一些代码来服务Ajax请求,最后,页面必须显示其结果。 为了演示Spring MVC,Ajax和JSON,我将使用购物网站场景。 在这种情况下,当用户单击“电子商务页面”链接时,该应用程序将从目录中加载一些项目并将其显示在页面上。 然后,用户检查多个项目并按“确认购买”。 现在,这就是Ajax和JSON的来源,在按“确认购买”时,浏览器向向其发送项目ID的服务器发出Ajax请求。 然后,服务器从数据库中检索项目,并将它们作为JSON返回到浏览器。 然后,浏览器处理JSON,并在屏幕上显示项目。 在编写代码时,第一步是使用Spring仪表板上可用的项目模板来创建Spring MVC项目。

拥有空白项目后,需要对项目的POM文件进行一些更改。 首先,您需要添加Jackson JSON Processor依赖项。 接下来,您需要将Spring的版本更新为3.2.2。 这是因为模板项目生成器仍会生成3.1.1版本的项目。

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.0.4</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.0.4</version></dependency>
<org.springframework-version>3.2.2.RELEASE</org.springframework-version>

如果查看我在Github上可用的代码,您会发现我还添加了Tomcat Maven插件并将Java编译器源/目标版本设置为1.7。 这些都是可选步骤。

接下来要做的是创建一个Item类来定义用户将从我们虚构的目录中购买的项目。

public class Item { private final int id; private final String description; private final String name; private final BigDecimal price; private Item(int id, String name, String description, BigDecimal price) { this.id = id; this.name = name; this.description = description; this.price = price; } public final BigDecimal getPrice() { return price; } public final int getId() { return id; } public final String getDescription() { return description; } public final String getName() { return name; } public static Item getInstance(int id, String name, String description, BigDecimal price) { Item item = new Item(id, name, description, price); return item; } }

上面的代码定义了我们简单的Item 。 它的属性包括idnamedescriptionprice

此购物场景的下一步是编写在屏幕上显示商品的代码,以便用户可以进行选择并将其提交给服务器。 如您所料,这涉及编写包含表单的JSP并使用Spring MVC控制器处理来自表单的请求。 我将首先讨论控制器代码,因为它决定了JSP的编写方式。

/** * Create the form */ @RequestMapping(value = "/shopping", method = RequestMethod.GET) public String createForm(Model model) { logger.debug("Displaying items available in the store..."); addDisplayItemsToModel(model); addFormObjectToModel(model); return FORM_VIEW; } private void addDisplayItemsToModel(Model model) { List<Item> items = catalogue.read(); model.addAttribute("items", items); } private void addFormObjectToModel(Model model) { UserSelections userSelections = new UserSelections(); model.addAttribute(userSelections); }

使我们的表单显示在屏幕上的控制器方法是createForm(…) 。 该方法由通常的RequestMapping注释进行注释,该注释告诉Spring将所有具有“ shopping ” URL的GET请求映射到该位置。 该方法包括三个步骤:首先读取目录,以获得要显示的项目列表;然后,执行以下步骤: 然后,它创建一个UserSelections对象,该表单在提交用户购买的商品时由表单使用。 最后,它将我们定向到shopping.jsp

对于这种形式的创建方法,这些设置步骤是很正常的:首先将显示数据添加到模型中,然后将表单提交方式添加到模型中; 但是,这两个步骤经常结合在一起。

在控制器代码中,您还将看到用于获取项目的catalogue对象。 在实际的应用程序中,这等效于创建一个服务层组件,该组件使用DAO和通常与此类应用程序关联的所有用具来读取数据。 在这种情况下,它只是从硬编码数组创建项目列表,并不重要。

该控制器代码与下面的JSP代码片段非常紧密地联系在一起:

<form:form modelAttribute="userSelections" action="confirm" method="post"><c:forEach items="${items}" var="item"><div class="span-4 border"><p><c:out value="${item.name}" /></p></div><div class="span-8 border"><p><c:out value="${item.description}" /></p></div><div class="span-4 border"><p>£<c:out value="${item.price}" /></p></div><div class="span-4 append-4 last"><p><form:checkbox value="${item.id}" path="selection"/></p></div></c:forEach><div class="prepend-12 span-4 append-12"><p><input class="command"type="submit" name="action"value="Confirm Purchase"accesskey="A" /></p></div></form:form>

这里有几点要注意。 首先,我通过使用Spring表单标签(<form:form…>)使自己的生活变得轻松,其次,我正在使用Blueprint格式化页面。 在设置表单标签时,首先要考虑的是表单标签的属性: modelAttributecommandmethodmodelAttribute用于绑定的UserSelections由控制器到HTML表格提供的类。 command属性是一个URL,它告诉浏览器在何处提交其数据,而method属性则告诉浏览器将提交的内容POST到服务器。

在JSP的下一部分中,我使用了forEach循环来显示先前从目录中检索到的项目。 重要的一行是form:checkbox标记。 您可能会怀疑,这会使用项目的ID和selection “路径”创建一个HTML复选框。 对我而言,“路径”一词听起来令人困惑。 Spring的员工实际上的意思是“提交时,取走存储在复选框的value属性(item.id)中的值,如果选中,则将其存储在
使用setSelection(…)方法的UserSelections对象”。 这可能是在后台完成的,方法是解析HttpServletRequest对象,然后使用Java反射进行一些挑剔的扑克操作。 需要注意的是,JSP中的名称如何与UserSelection类的属性名称联系UserSelection

我发现Spring表单标签在大多数情况下非常有用; 但是,为了使事情简单,它在绑定到哪个HTML对象的数据上确实有一些限制。 当您遇到这些限制之一时,请结合使用更多详细的Spring Bind标签和form标签。

好的,因此,当您运行此代码时,将显示一个类似于以下内容的屏幕:

问题是,我知道我在此博客中没有谈论过AKAX和JSON,但我需要设置场景。 在该博客的第二部分中,我一定会介绍该场景的实质部分:通过Ajax调用获取和显示JSON数据。 有关此博客的完整源代码,请参见GitHub – https://github.com/roghughe/captaindebug/tree/master/ajax-json

参考: Spring MVC,Ajax和JSON第1部分–在Captain Debug的Blog博客上由JCG合作伙伴 Roger Hughes进行设置。

翻译自: https://www.javacodegeeks.com/2013/05/spring-mvc-ajax-and-json-part-1-setting-the-scene.html

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

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

相关文章

柜员计算机技能,新入职柜员必备软件:柜员技能训练系统最新版

如果你是新入职柜员的大学生&#xff0c;这个软件你肯定用得着&#xff01;如果你是资格老的柜员同胞&#xff0c;这个软件你肯定用得着&#xff01;这个软件&#xff0c;针对柜员的小键盘、打字和点钞三项技能要求&#xff0c;专门针对痛点开发&#xff0c;可以有效训练柜员的…

Html5和Css3扁平化风格网页

前言 扁平化概念的核心意义 去除冗余、厚重和繁杂的装饰效果。而具体表现在去掉了多余的透视、纹理、渐变以及能做出3D效果的元素&#xff0c;这样可以让“信息”本身重新作为核心被凸显出来。同时在设计元素上&#xff0c;则强调了抽象、极简和符号化。 示例 视频效果&…

按功能而不是按层打包课程

大多数企业Java应用程序在设计上都有一些相似之处。 这些应用程序的打包通常由它们使用的框架&#xff08;如Spring&#xff0c;EJB或Hibernate等&#xff09;驱动。或者&#xff0c;您可以按功能对打包进行分组。 像其他任何有关建模的项目一样&#xff0c;这也不是没有任何问…

总是助手服务器失败怎么回事,《遇见逆水寒》连接服务器失败解决方法汇总 服务器连接失败问题原因...

导读遇见逆水寒连接服务器失败怎么回事&#xff0c;近期不少小伙伴都在反映遇见逆水寒助手连接服务器失败&#xff0c;一直登不上去是怎么回事&#xff0c;小编这就为大家分享下遇见逆水寒连接服务器失败解决方法。遇见逆水寒连接服务器失败解决方法...遇见逆水寒连接服务器失败…

Linux常用开发环境软件-redis安装

linux下安装redis3.2.11版本  1、安装编译环境 yum install gcc  //安装编译环境 2、到官网下载redis 官网地址&#xff1a;https://redis.io/download 3、用WinScp工具&#xff0c;将下载好的redis-3.2.11.tar.gz传输到linux服务器下的opt目录下(opt就相当于window的d://so…

项目第十一天

站立式会议&#xff1a; 燃尽图&#xff1a; 项目&#xff1a; 项目进展&#xff1a;系统完成&#xff0c;进行测试。 问题&#xff1a;测试的时候发现不知道如何进行系统的测试&#xff0c;所以测试内容的比较乱。 体会&#xff1a;从无到有完成一个项目&#xff0c;需要很多步…

JPA:确定关系的归属方

使用Java Persistence API&#xff08;JPA&#xff09;时&#xff0c;通常需要在两个实体之间创建关系。 这些关系是通过使用外键在数据模型&#xff08;例如数据库&#xff09;中定义的&#xff0c;而在我们的对象模型&#xff08;例如Java&#xff09;中则使用注释来定义关联…

服务器芯片镜像测试,模拟镜像服务器磁盘问题的两个测试【转】

我们知道在高安全模式下&#xff0c;在主服务器上提交的事务必须同时在镜像服务器上提交成功&#xff0c;否则该事务无法在主数据库上提交。在上面的图中&#xff0c;一个事务在主数据库上提交的步骤包含&#xff1a;客户端程序将事务发送给主数据库服务器SQLServer主数据库服务…

运用Arc Hydro提取河网

Arc hydro 插件需要 spatial analyst 支持&#xff1a; 解决方法&#xff1a;Tools菜单>>Extensions...&#xff0c;勾选Spatial Analyst 1.设置存储路径 ApUtilities-set target locations 2.导入dem 3.拼接dem Dataset Name 设置为.tif,即存为tif格式&#xff0c;否则…

服务器性能是什么,什么是服务器性能的显卡,怎么理解?

什么是服务器性能的显卡&#xff0c;怎么理解&#xff1f;如果单说“”二字就是个伪命题&#xff0c;服务分不同的性能级别&#xff0c;有些刀片器的性能甚至还不如某些发烧级的游戏台式机&#xff0c;那它所用的显卡性能也会比较一般&#xff0c;如果是说哪些显卡是专门为服务…

打印机网络共享服务器不稳定,共享打印机无法访问怎么办,教你一招问题立马解决...

基本上只有本地打印机共享才会出现下面的问题&#xff0c;通过网线连接和打印机服务器连接的打印机不会出现此类问题&#xff0c;多个电脑连接网络打印机本质上还是各个电脑连接的本地打印机。一、 设置打印机共享时出现错误连接好本地打印机后&#xff0c;想要共享给同事使用&…

CSS margin 外边距 属性的位置关系

padding&#xff1a;内边距margin &#xff1a;外边距 margin:10px; 所有 4 个外边距都是 10px ******************************************* margin:10px 5px; 上外边距和下外边距是 10px右外边距和左外边距是 5px ******************************************** margin:10px…

C语言博客作业--字符数组

一、PTA实验作业 题目1&#xff1a;7-1 字符串转换成十进制整数 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明。 这个问题我看了好久&#xff0c;试了很多的的错误点&#xff0c;答案和我预料的一样&#xff0c;所以我重新看了一遍…

Java 7 Update 21安全改进的详细信息

甲骨文昨天发布了三个Java更新 。 重要的是要注意它们包含一些与安全性相关的更改。 一段时间以来&#xff0c;已经宣布了其中的大多数更改&#xff0c;并且首先要注意的是Oracle按计划交付。 甲骨文公司Java平台安全经理Milton Smith最近在DevoxxUK上做了题为“ 用Java保护…

du的原理 linux_Linux 文件系统管理

1、文件系统介绍1&#xff09;、Linux 文件系统特性super block&#xff08;超级块&#xff09;记录整个文件系统的信息。包括 block 与 inode 的总量&#xff0c;已经使用的 block 和 inode 的数量&#xff0c;未使用的 block 和 inode 的数量&#xff0c;block 与 inode 的大…

box-shadow IE8兼容处理

根据canisue&#xff08;http://caniuse.com/#searchbox-shadow&#xff09;&#xff0c;box-shadow兼容性如下图所示&#xff1a; 测试代码&#xff1a; 1 <!DOCTYPE html>2 <html>3 4 <head>5 <meta charset"UTF-8">6 …

ECharts.js学习(一) 简单入门

EChart.js 简单入门 最近有一个统计的项目要做&#xff0c;在前端的数据需要用图表的形式展示。网上搜索了一下&#xff0c;发现有几种统计图库。 MSChart 这个是Visual Studio里的自带控件&#xff0c;使用比较简单&#xff0c;不过数据这块需要在后台绑定。 ichartjs 是一款…

金蝶云系统显示服务器离线,金蝶云服务器已离线是什么情况

金蝶云服务器已离线是什么情况 内容精选换一换根据是否支持挂载至多台云服务器可以将磁盘分为非共享磁盘和共享磁盘。一个非共享磁盘只能挂载至一台云服务器&#xff0c;而一个共享磁盘可以同时挂载至多台云服务器。共享磁盘是一种支持多个云服务器并发读写访问的数据块级存储设…

分布式是什么意思_机架式ups是什么意思?与分布式DPS有何不同之处?

ups电源很多人听过了&#xff0c;主要是让设备在突然断电的情况下遭遇停电的损坏&#xff0c;保障数据及重要程序运行。那么&#xff0c;机架式ups电源可能就是很多人不太了解的了&#xff0c;在说到与分布式DPS有何不同之处那是很少有人清楚了解了&#xff0c;不管怎么说&…

【原】老生常谈-从输入url到页面展示到底发生了什么

刚开始写这篇文章还是挺纠结的&#xff0c;因为网上搜索“从输入url到页面展示到底发生了什么”&#xff0c;你可以搜到一大堆的资料。而且面试这道题基本是必考题&#xff0c;二月份面试的时候&#xff0c;虽然知道这个过程发生了什么&#xff0c;不过当面试官一步步追问下去的…