先行一步
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 将被保存并且用户将被重定向;例如重定向到 http://localhost:8080/mvc-basic/account/1。
为了展示另一个很酷的新特性,尝试请求一个不存在的账户;例如 /account/99。
Spring 3 是一个非常棒的版本,在许多令人兴奋的领域包含了大量新特性和简化。希望你觉得这篇关于 Spring MVC 新增强功能的文章有用。正如我在开头提到的,敬请期待“Spring 3 简化”系列中的更多内容,我们将继续展示使用最新版本框架可以完成的新的有趣的事情。
节日快乐!