领先一步
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 简化”系列中将推出的更多内容,我们将继续展示使用最新版本框架可以实现的新颖有趣的事物。
节日快乐!