領先一步
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 中,您會發現一個典型的設定。第一行,元件掃描已開啟,用於從類路徑中發現應用程式元件。在下一行,您會發現第一個新的 Spring MVC 3 功能正在執行
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
此標籤註冊了將請求分派到您的 @Controllers 所需的 HandlerMapping 和 HandlerAdapter。此外,它還根據類路徑中存在的內容應用合理的預設值。這些預設值包括
接下來,下一行演示了另一個新功能
<!-- Forwards requests to the "/" resource to the "welcome" view -->
<mvc:view-controller path="/" view-name="welcome" />
在幕後,mvc:view-controller 註冊了一個 ParameterizableViewController,它選擇一個檢視進行渲染。在這種情況下,當請求“/”時,歡迎檢視將被渲染。實際的檢視模板是 /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 標籤允許您註冊 HandlerInterceptors 以應用於所有控制器。以前,要做到這一點,您必須為每個 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 目錄中的檔案。
將一切付諸行動,如果您部署示例,您應該會看到歡迎檢視渲染
隨意啟用不同的語言連結,讓 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 簡化”系列中將推出的更多內容,我們將繼續展示使用最新版本框架可以實現的新穎有趣的事物。
節日快樂!