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個不同國家教授Spring給1000多名學生。他曾在眾多會議上就Spring發表演講,並且是SpringSource部落格上的活躍技術博主。Michael在SpringSource擔任亞太地區教育經理…

Spring Petclinic已上線Github!

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

我們很高興地宣佈,Spring Petclinic示例應用程式已重構。

原始碼現已在github上可用。這是新應用程式的截圖:

以下是新架構的概述

Spring, Spring, Spring

我們使用了以下Spring特性

  • 使用註解進行依賴注入
  • 使用jdbc (JdbcTemplate)、JPA或Spring Data JPA (repository層) 進行資料訪問整合。您可以透過在web.xml或JUnit測試中設定相應的bean profile來選擇要使用的實現。
  • 使用@Transactional進行事務處理(服務層)
  • 使用@Cacheable和ehcache作為快取實現進行快取(服務層)
  • 面向切面程式設計(監控每個Repository方法被呼叫的次數)
  • 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建立了一個Spring-Petclinic分支,該分支使用Thymeleaf代替JSP。他們在這篇部落格文章中記錄了遷移步驟: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 China的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就此主題撰寫了一系列五篇精彩的部落格文章。

它回答了以下問題: - 我應該依賴會話上下文嗎?(第二部分) - 我應該使用哪個Apache Tomcat聯結器?(第二部分) - 我應該使用哪個資料庫連線池?(第三部分) - JDBC是否比JPA或Spring Data JPA更快?( 第四部分) - 使用OpenSessionInViewFilter有什麼優點?( 第四部分)

 

參考文獻

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物件不應該……