进入 Spring MVC

    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,能够选择是使用内置的 Spring Web 框架仍是 Struts 这样的 Web 框架。经过策略接口,Spring 框架是高度可配置的,并且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,因此不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。web

Spring 的 Web MVC 框架是围绕 DispatcherServlet 设计的,它把请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上载文件支持。默认的处理程序是很是简单的 Controller 接口,只有一个方法 ModelAndView handleRequest(request, response)。Spring 提供了一个控制器层次结构,能够派生子类。若是应用程序须要处理用户输入表单,那么能够继承 AbstractFormController。若是须要把多页输入处理到一个表单,那么能够继承 AbstractWizardFormControllerspring

    示例应用程序有助于直观地学习这些特性。银行应用程序容许用户检索他们的账户信息。在构建银行应用程序的过程当中,能够学到如何配置 Spring MVC 框架和实现框架的视图层,视图层包括 JSTL 标记(用于显示输出的数据)和JavaServer Pages 技术。session

要开始构建示例应用程序,请配置 Spring MVC 的 DispatcherServlet。请在 web.xml 文件中注册全部配置。清单 1 显示了如何配置 sampleBankingServlet架构

<servlet>
   <servlet-name>sampleBankingServlet</servlet-name>  
   <servlet-class>
      org.springframework.we.servlet.DispatcherServlet
   <servlet-class>
   <load-on-startup>1<load-on-startup>
<servlet>

DispatcherServlet 从一个 XML 文件装入 Spring 应用程序上下文,XML 文件的名称是 servlet 的名称后面加上 -servlet 。在这个示例中,DispatcherServlet 会从 sampleBankingServlet-servlet.xml 文件装入应用程序上下文。app

下一步是配置想让 sampleBankingServlet 处理的 URL。一样,仍是要在 web.xml 中注册全部这些信息。框架

<servlet-mapping>
<servlet-name> sampleBankingServlet<servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping> 

下面,装入配置文件。为了作到这点,请为 Servlet 2.3 规范注册 ContextLoaderListener 或为 Servlet 2.2 及如下的容器注册 ContextLoaderServlet。为了保障后向兼容性,请用 ContextLoaderServlet。在启动 Web 应用程序时,ContextLoaderServlet 会装入 Spring 配置文件。清单 3 注册了 ContextLoaderServletjsp

<servlet>
  <servlet-name>context>servlet-name>
  <servlet-class>
     org.springframework.web.context.ContextLoaderServlet
  </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

contextConfigLocation 参数定义了要装入的 Spring 配置文件,以下面的 servlet 上下文所示。学习

<context-param> <param-value>contextConfigLocation</param-value> <param-value>/WEB-INF/sampleBanking-services.xml</param-value> </context-param>

sampleBanking-services.xml 文件表明示例银行应用程序服务的配置和 bean 配置。若是想装入多个配置文件,能够在 <param-value> 标记中用逗号做分隔符。url

示例银行应用程序容许用户根据唯一的 ID 和口令查看账户信息。虽然 Spring MVC 提供了其余选项,可是我将采用 JSP 技术做为视图页面。这个简单的应用程序包含一个视图页用于用户输入(ID 和口令),另外一页显示用户的账户信息。spa

我从 LoginBankController 开始,它扩展了 Spring MVC 的 SimpleFormControllerSimpleFormContoller 提供了显示从 HTTP GET 请求接收到的表单的功能,以及处理从 HTTP POST 接收到的相同表单数据的功能。LoginBankControllerAuthenticationServiceAccountServices 服务进行验证,并执行账户活动。“ 配置视图属性 ”一节中的 清单 5 描述了如何把 AuthenticationServiceAccountServices 链接到 LoginBankController清单 4 显示了 LoginBankController 的代码。

下面,我必须注册在接收到 HTTP GET 请求时显示的页面。我在 Spring 配置中用 formView 属性注册这个页面,如清单 5 所示。sucessView 属性表明表单数据提交并且 doSubmitAction() 方法中的逻辑成功执行以后显示的页面。formViewsucessView 属性都表明被定义的视图的逻辑名称,逻辑名称映射到实际的视图页面。

<bean id="loginBankController"
         class="springexample.controller.LoginBankController">
      <property name="sessionForm"><value>true</value></property>
   <property name="commandName"><value>loginCommand</value></property>
   <property name="commandClass">
      <value>springexample.commands.LoginCommand</value>
   </property>
      <property name="authenticationService">
         <ref bean="authenticationService" />
      </property>
      <property name="accountServices">
         <ref bean="accountServices" />
      </property>
      <property name="formView">
         <value>login</value>
      </property>
      <property name="successView">
         <value>accountdetail</value>
      </property>
   </bean>

commandClasscommandName 标记决定将在视图页面中活动的 bean。例如,能够经过 login.jsp 页面访问 loginCommand bean,这个页面是应用程序的登陆页面。一旦用户提交了登陆页面,应用程序就能够从 LoginBankControlleronSubmit() 方法中的命令对象检索出表单数据。

Spring MVC 的 视图解析器 把每一个逻辑名称解析成实际的资源,即包含账户信息的 JSP 文件。我用的是 Spring 的 InternalResourceViewResolver,如 清单 6 所示。

由于我在 JSP 页面中使用了 JSTL 标记,因此用户的登陆名称解析成资源 /jsp/login.jsp,而 viewClass 成为 JstlView

就像前面提到的,LoginBankController 内部链接了 Spring 的 AccountServicesAuthenticationServiceAuthenticationService 类处理银行应用程序的验证。AccountServices 类处理典型的银行服务,例如查找交易和电汇。清单 7 显示了银行应用程序的验证和账户服务的配置。

<beans>
   <bean id="accountServices" 
      class="springexample.services.AccountServices">
   </bean>
   <bean id="authenticationService" 
      class="springexample.services.AuthenticationService">
   </bean>
</beans>

以上服务在 sampleBanking-services.xml 中注册,而后装入 web.xml 文件中,就像 前面讨论的那样。控制器和服务配置好后,这个简单的应用程序就完成了。

相关文章
相关标签/搜索