Michael Isvy

Michael Isvy

校友
博客文章作者Michael Isvy

将 Spring Web MVC 应用程序从 JSP 迁移到 AngularJS

工程 | 2015年8月19日 | ...

关于作者的说明

这篇文章是由 Han LimTony Nguyen 撰写的客座文章。Han 和 Tony 在我们的新加坡 Spring 用户组上做了关于 Spring + Angular JS 的精彩演示。这篇博客基于他们的演示。

摘要

在这篇文章中,我们试图描述我们从 JSP、Struts 和 Velocity 等服务器端渲染视图技术迁移到使用 AngularJS(一个流行的现代浏览器 Javascript 框架)的客户端渲染视图技术的经验。我们将讨论进行此更改时需要注意的一些事项以及可能遇到的潜在陷阱。如果……

新加坡免费 Spring - Hadoop 会议

新闻 | 2013年8月22日 | ...

我们很高兴地宣布,我们将在 8 月 30 日星期五下午 6 点至 8 点在新加坡市中心举办一场关于 Spring 和 Hadoop 的免费会议。

Spring 最佳实践:从 Spring Petclinic 到 Spring Data Hadoop

Michael Isvy 于 2008 年加入 SpringSource(Spring 背后的公司,现在是 Pivotal 的一部分)。从那时起,他便向 10 个不同国家的 1000 多名学生教授 Spring。他在许多会议上发表了关于 Spring 的演讲,并且是 SpringSource 博客 上活跃的技术博客作者。Michael 在 SpringSource 担任亚太地区教育经理……

Spring Petclinic 现已上线 GitHub!

工程 | 2013年3月21日 | ...

我们高兴地宣布,Spring Petclinic 示例应用程序已重构。

源代码现在可在 github 上获取。以下是新应用程序的屏幕截图:

以下是新架构的概述

Spring,Spring,Spring

我们使用了以下 Spring 功能

  • 使用注解的依赖注入
  • 使用 jdbc (JdbcTemplate)、JPA 或 Spring Data JPA(存储库层)的数据访问集成。您可以通过在 web.xml 或其中一个 JUnit 测试中设置相应的 bean 配置文件来选择要使用的实现。
  • 使用 @Transactional(服务层)的事务
  • 使用 @Cacheable 和 ehcache 作为缓存实现的缓存(服务层)
  • 面向方面编程(监控每个存储库方法的调用次数)
  • Spring MVC:使用 Bean Validation (JSR-303) 的表单验证
  • Spring MVC:使用 ContentNegotiatingViewResolver 的内容协商(html、xml 或 atom)
  • Spring MVC:使用 SimpleMappingExceptionResolver 的异常处理
  • Spring MVC:Spring MVC 测试框架的使用

 

我们充满活力的社区

我们从社区中的专家那里获得了大量贡献(包括多个开源项目的负责人)。

 

Thymeleaf

如果您还没有听说过它,Thymeleaf 可以被视为 JSP 的替代品。它将自己定义为一个 XML/XHTML/HTML5 模板引擎。

它基于一些带有少量命名空间魔术的纯 HTML 文件。

Thymeleaf 项目的 Daniel 和 Soraya 创建了一个使用 Thymeleaf 代替 JSP 的 Spring-Petclinic 分支。他们在这篇博客文章中记录了迁移步骤:http://www.thymeleaf.org/petclinic.html

Spring Petclinic 的 Thymeleaf 分支可在此处获取:https://github.com/thymeleaf/thymeleafexamples-petclinic

要了解有关 Thymeleaf 的更多信息:http://www.thymeleaf.org

在 Twitter 上关注 Thymeleaf:https://twitter.com/thymeleaf

 

Dandelion

Dandelion 提供了一套您可以与 JSP 或 Thymeleaf 一起使用的标签库。

我们在 Spring-Petclinic 中使用它来处理 DataTables。它基于 jQuery DataTables 和 Bootstrap 生成表格。

您可以执行以下操作


<datatables:table data="${ownerList}" id="dataTable"  theme="bootstrap2" export="pdf">
 <datatables:column title="Name" property="name" sortable="true" />
 <datatables:column title="Address" property="address" sortable="true" />
</datatables:table>

然后输出的 html 表格如下所示

Dandelion 用于 Spring Petclinic 的主分支中。

Dandelion 项目的 Thibault Duchateau 撰写了 一篇很好的博客文章,描述了 Spring Petclinic 应用程序的迁移

要了解有关 Dandelion 的更多信息: http://dandelion.github.com/

在 Twitter 上关注他们:https://twitter.com/dandelion_proj

 

Maven 还是 Gradle?

默认情况下,Spring Petclinic 使用 Maven,因为它是 Java 应用程序最常见的选择。虽然与大多数实际应用程序相比,Spring Petclinic 相当小,但它的 Maven pom.xml 文件已经相当冗长。

来自 Thoughtworks 中国的李艳辉 (Li Yanhui) 已经很好地将 Spring Petclinic 迁移到了 Gradle。这是一种并排比较 Maven 和 Gradle 的好方法。build.gradle 配置文件确实更容易理解。它目前包含 143 行(而 Maven POM 包含 543 行)。

您可以在此处浏览基于 Gradle 的 Spring Petclinic 版本:https://github.com/whimet/spring-petclinic 感谢他们,我们能够识别 Spring Petclinic 中一些包含代码重复和缺乏自动化测试的地方。

 

性能测试:让我们扩展!

是否可以采用现在的 Spring Petclinic 并将其扩展到单台服务器实例上每秒 1000 个请求?来自 Ippon Technologies 的 Julien Dubois 撰写了 关于该主题的五个精彩博客文章系列。

它回答了以下问题:- 我应该依赖会话上下文吗?(第 2 部分) - 我应该使用哪个 Apache Tomcat 连接器?(第 2 部分) - 我应该使用哪个数据库连接池?(第 3 部分) - JDBC 是否比 JPA 或 Spring Data JPA 更快?(第 4 部分) - 使用 OpenSessionInViewFilter 的优点是什么?(第 4 部分)

 

参考文献

GitHub 上的 Spring Petclinic Cloud Foundry 上的 Spring Petclinic Petclinic + Thymeleaf Petclinic + Gradle

 

Spring MVC:从 JSP 和 Tiles 到 Thymeleaf

工程 | 2012年10月30日 | ...

在视图层方面,Spring @MVC 为您提供了多种选择。在本文中,我们将首先讨论您在过去几年中最有可能使用视图层的方式:JSP。我们将看到使用它们的好方法和更好的方法(普通的 JSP、带有自定义标签的 JSPApache Tiles)。

然后,我们将讨论一个名为 Thymeleaf 的新项目,您可以将其用作 JSP 的替代方法。

像往常一样,您可以在 github 上相应的应用程序中找到本文中讨论的所有代码示例。

纯 JSP

让我们从下面的代码示例开始

<html …> <body>
 <div style="padding-top: 50px;">
   <jsp:include page="../menu.jspx"/>
   <c…

将 Spring MVC 与 jQuery 集成以进行验证规则

工程 | 2012年8月29日 | ...

我很高兴看到在最近的 zeroturnaround 的调查中,Spring MVC 被评为最受欢迎的 Java Web 框架。

此框架非常灵活,并且有数十种使用方法。与所有具有许多选项的灵活框架一样,讨论常见实践非常重要。

我为这篇博客文章创建的项目使用了许多 Spring MVC 应用程序中常见的特性。你会发现这样的东西

在控制器中,你会发现用于映射请求、通过注解提取请求数据、数据绑定、文件上传等的典型 Spring MVC 功能……

在……

事务、缓存和 AOP:了解 Spring 中的代理使用

工程 | 2012年5月23日 | ...

在 Spring 框架中,许多技术特性都依赖于代理的使用。我们将使用三个示例深入探讨此主题:事务缓存Java 配置

本博客文章中显示的所有代码示例都可在 我的 github 帐户上获取

事务

第一步:无事务

下面的 Service 类目前不是事务性的。让我们首先按原样查看它,然后使其成为事务性的。

@Service
public class AccountServiceImpl  implements AccountService {
 //…

//Not specifying a transaction policy here!
 public void create(Account account) {
 entityManager.persist(account);
 }
}

由于“create”方法不是事务性的,它很可能会抛出异常(因为此 Account 对象不应该……