先行一步
VMware 提供培訓和認證,助你快速進步。
瞭解更多正如 Juergen 和 Arjen 所提到的,Java 開發者使用 Spring 3.0 可以順利升級。現在 Spring 3 已經發布,我想帶你瞭解一些你可能還不瞭解的新的 MVC 特性。希望你覺得這些特性有用,並能立即開始在你的 web 應用中使用它們。
這也是“Spring 3 簡化”系列文章的開端,敬請期待未來幾天和幾周內更多類似的文章。
Spring 3 引入了一個 mvc 名稱空間,極大地簡化了 Spring MVC 的設定。伴隨其他增強功能,啟動和執行 Spring web 應用變得前所未有的簡單。這可以透過 mvc-basic 示例來演示,我現在就帶你瞭解它。
mvc-basic 的設計旨在演示一組基本的 Spring MVC 特性。該專案可在我們的 spring-samples SVN 倉庫獲取,可以使用 Maven 構建,並且可以匯入 Eclipse。請從 web.xml 開始檢視,並注意其中的配置。值得注意的是,DispatcherServlet 配置了一個主 Spring 配置檔案,用於初始化所有其他應用程式元件。DispatcherServlet 被配置為應用程式的預設 servlet(對映到 "/"),從而允許使用乾淨的 REST 風格 URL。
在主 servlet-context.xml 檔案中,你會看到一個典型的設定。第一行啟用了元件掃描,以便從 classpath 發現應用程式元件。下一行你會看到第一個新的 Spring MVC 3 特性
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
此標籤註冊了將請求分派到 @Controllers 所需的 HandlerMapping 和 HandlerAdapter。此外,它根據你的 classpath 中存在的內容應用了合理的預設設定。這些預設設定包括
接下來,下一行演示了另一個新特性
<!-- Forwards requests to the "/" resource to the "welcome" view -->
<mvc:view-controller path="/" view-name="welcome" />
在幕後,mvc:view-controller 註冊了一個 ParameterizableViewController,用於選擇要渲染的檢視。在這種情況下,當請求 "/" 時,會渲染 welcome 檢視。實際的檢視模板是一個位於 /WEB-INF/views 目錄下的 .jsp 檔案。
接下來,下一行展示了另一個新特性
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<!-- Changes the locale when a 'locale' request parameter is sent; e.g. /?locale=de -->
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
mvc:interceptors 標籤允許你註冊 HandlerInterceptor,以便應用於所有控制器。以前,你需要為每個 HandlerMapping bean 顯式註冊此類攔截器,這很重複。另外請注意,此標籤現在允許你限制某些攔截器適用於哪些 URL 路徑。
接下來,下一行突出顯示了版本 3.0.4 中新增的一個特性
<!-- Handles GET requests for /resources/** by efficiently serving static content in the ${webappRoot}/resources dir -->
<mvc:resources mapping="/resources/**" location="/resources/" />
mvc:resources 標籤允許你為靜態資源(如 css 和 javascript 檔案)配置一個處理器。在這種情況下,對 /resources/** 的請求被對映到 /resources 目錄內的檔案。
將應用程式部署起來,你應該會看到 welcome 檢視渲染出來
隨時可以啟用不同的語言連結,讓 LocaleChangeInterceptor 切換使用者本地化。
我接下來將要說明的一組新特性與 @Controller 繫結和驗證有關。正如我幾周前在部落格中提到的,這方面有很多新內容。
在示例中,如果你啟用 @Controller 示例 連結,應該會渲染出以下表單
在此之後,如果你更改本地化設定,應該會看到國際化欄位格式化生效。例如,從 en 切換到 de 會使續訂日期 12/21/10 格式化為 21.12.10。這種行為和表單的驗證規則由模型註解驅動
public class Account {
@NotNull
@Size(min=1, max=25)
private String name;
@NotNull
@NumberFormat(style=Style.CURRENCY)
private BigDecimal balance = new BigDecimal("1000");
@NotNull
@NumberFormat(style=Style.PERCENT)
private BigDecimal equityAllocation = new BigDecimal(".60");
@DateTimeFormat(style="S-")
@Future
private Date renewalDate = new Date(new Date().getTime() + 31536000000L);
}
表單提交由以下 AccountController 方法處理
@RequestMapping(method=RequestMethod.POST)
public String create(@Valid Account account, BindingResult result) {
if (result.hasErrors()) {
return "account/createForm";
}
this.accounts.put(account.assignId(), account);
return "redirect:/account/" + account.getId();
}
此方法在繫結和驗證之後被呼叫,其中 Account 輸入的驗證由 @Valid 註解觸發。如果存在任何驗證錯誤,createForm 將被重新渲染,否則 Account 將被儲存並且使用者將被重定向;例如重定向到 https://:8080/mvc-basic/account/1。
為了展示另一個很酷的新特性,嘗試請求一個不存在的賬戶;例如 /account/99。
Spring 3 是一個非常棒的版本,在許多令人興奮的領域包含了大量新特性和簡化。希望你覺得這篇關於 Spring MVC 新增強功能的文章有用。正如我在開頭提到的,敬請期待“Spring 3 簡化”系列中的更多內容,我們將繼續展示使用最新版本框架可以完成的新的有趣的事情。
節日快樂!