程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring系列,第3部分:進入Spring MVC - 用Spring MVC輕松進行應用程序開發

Spring系列,第3部分:進入Spring MVC - 用Spring MVC輕松進行應用程序開發

編輯:關於JAVA

Spring MVC 框架

Spring 框架提供了構建 Web 應用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構,可以選擇是使用內置的 Spring Web 框架還是 Struts 這樣的 Web 框架。通過策略接口,Spring 框架是高度可配置的,而且包含多種視圖技術,例如 JavaServer Pages(JSP)技術、Velocity、Tiles、iText 和 POI。Spring MVC 框架並不知道使用的視圖,所以不會強迫您只使用 JSP 技術。Spring MVC 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。

Spring 的 Web MVC 框架是圍繞 DispatcherServlet 設計的,它把請求分派給處理程序,同時帶有可配置的處理程序映射、視圖解析、本地語言、主題解析以及上載文件支持。默認的處理程序是非常簡單的 Controller 接口,只有一個方法 ModelAndView handleRequest(request, response)。Spring 提供了一個控制器層次結構,可以派生子類。如果應用程序需要處理用戶輸入表單,那麼可以繼承 AbstractFormController。如果需要把多頁輸入處理到一個表單,那麼可以繼承 AbstractWizardFormController。

示例應用程序有助於直觀地學習這些特性。銀行應用程序允許用戶檢索他們的帳戶信息。在構建銀行應用程序的過程中,可以學到如何配置 Spring MVC 框架和實現框架的視圖層,視圖層包括 JSTL 標記(用於顯示輸出的數據)和JavaServer Pages 技術。

配置 Spring MVC

要開始構建示例應用程序,請配置 Spring MVC 的 DispatcherServlet。請在 web.xml 文件中注冊所有配置。清單 1 顯示了如何配置 sampleBankingServlet。

清單 1. 配置 Spring MVC DispatcherServlet

<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 文件裝入應用程序上下文。

配置應用程序的 URL

下一步是配置想讓 sampleBankingServlet 處理的 URL。同樣,還是要在 web.xml 中注冊所有這些信息。

清單 2. 配置想要處理的 URL

<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 注冊了 ContextLoaderServlet。

清單 3. 注冊 ContextLoaderServlet

<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> 標記中用逗號作分隔符。

Spring MVC 示例

示例銀行應用程序允許用戶根據惟一的 ID 和口令查看帳戶信息。雖然 Spring MVC 提供了其他選項,但是我將采用 JSP 技術作為視圖頁面。這個簡單的應用程序包含一個視圖頁用於用戶輸入(ID 和口令),另一頁顯示用戶的帳戶信息。

我從 LoginBankController 開始,它擴展了 Spring MVC 的 SimpleFormController。SimpleFormContoller 提供了顯示從 HTTP GET 請求接收到的表單的功能,以及處理從 HTTP POST 接收到的相同表單數據的功能。LoginBankController 用 AuthenticationService 和 AccountServices 服務進行驗證,並執行帳戶活動。“ 配置視圖屬性 ”一節中的 清單 5 描述了如何把 AuthenticationService 和 AccountServices 連接到 LoginBankController。 清單 4 顯示了 LoginBankController 的代碼。

清單 4. LoginBankController 擴展 SimpleFormController

public class LoginBankController extends SimpleFormController {
  public LoginBankController(){
  }
  protected ModelAndView onSubmit(Object command) throws Exception{
    LoginCommand loginCommand = (LoginCommand) command;
    authenticationService.authenticate(loginCommand);
    AccountDetail accountdetail = accountServices.getAccountSummary(loginCommand.getUserId());
    return new ModelAndView(getSuccessView(),"accountdetail",accountdetail);
  }
  private AuthenticationService authenticationService;
  private AccountServices accountServices;
  public AccountServices getAccountServices() {
    return accountServices;
  }
  public void setAccountServices(AccountServices accountServices) {
    this.accountServices = accountServices;
  }
  public AuthenticationService getAuthenticationService() {
    return authenticationService;
  }
  public void setAuthenticationService(
     AuthenticationService authenticationService) {
    this.authenticationService = authenticationService;
  }
}

配置視圖屬性

下面,我必須注冊在接收到 HTTP GET 請求時顯示的頁面。我在 Spring 配置中用 formView 屬性注冊這個頁面,如清單 5 所示。sucessView 屬性代表表單數據提交而且 doSubmitAction() 方法中的邏輯成功執行之後顯示的頁面。formView 和 sucessView 屬性都代表被定義的視圖的邏輯名稱,邏輯名稱映射到實際的視圖頁面。

清單 5. 注冊 LoginBankController

  <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>

commandClass 和 commandName 標記決定將在視圖頁面中活動的 bean。例如,可以通過 login.jsp 頁面訪問 loginCommand bean,這個頁面是應用程序的登錄頁面。一旦用戶提交了登錄頁面,應用程序就可以從 LoginBankController 的 onSubmit() 方法中的命令對象檢索出表單數據。

視圖解析器

Spring MVC 的 視圖解析器 把每個邏輯名稱解析成實際的資源,即包含帳戶信息的 JSP 文件。我用的是 Spring 的 InternalResourceViewResolver,如 清單 6 所示。

清單 6. InternalResourceViewResolver

<bean id="view-Resolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass">
    <value>org.springframework.web.servlet.view.JstlView</value>
  </property>
  <property name="prefix"><value>/jsp/</value></property>
  <property name="suffix"><value>.jsp</value></property>
</bean>

因為我在 JSP 頁面中使用了 JSTL 標記,所以用戶的登錄名稱解析成資源 /jsp/login.jsp,而 viewClass 成為 JstlView。

驗證和帳戶服務

就像前面提到的,LoginBankController 內部連接了 Spring 的 AccountServices 和 AuthenticationService。AuthenticationService 類處理銀行應用程序的驗證。AccountServices 類處理典型的銀行服務,例如查找交易和電匯。清單 7 顯示了銀行應用程序的驗證和帳戶服務的配置。

清單 7. 配置驗證和帳戶服務

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

以上服務在 sampleBanking-services.xml 中注冊,然後裝入 web.xml 文件中,就像 前面討論的那樣。控制器和服務配置好後,這個簡單的應用程序就完成了。現在我們來看看部署和測試它時會發生什麼!

部署應用程序

我把示例應用程序部署在 Tomcat servlet 容器中。Tomcat 是 Java Servlet 和 Java ServerPagest 技術的官方參考實現中使用的 servlet 容器。如果以前沒這麼做過,請 下載 jakarta-tomcat-5.0.28.exe 並運行它把 Tomcat 安裝到自己喜歡的任何位置,例如 c:\tomcat5.0。

接下來,下載示例代碼 並釋放到驅動器(例如 c:\ )上。創建了 Spring 項目的文件夾之後,打開它並把 spring-banking 子文件夾拷貝到 c:\tomvat5.0\webapps。spring-banking 文件夾是一個 Web 檔案,裡面包含 Spring MVC 示例應用程序。lib 文件夾包含應用程序需要的 Spring 框架、與Spring 相關的 MVC 庫以及 JSTL 標記庫和 jar 文件。

要啟動 Tomcat 服務器,請使用以下命令:

cd bin C:\Tomcat 5.0\bin> catalina.bat start

Tomcat 應當啟動並部署 Spring MVC 示例應用程序。

測試應用程序

要測試應用程序,請打開 Web 浏覽器,指向 http://localhost:tomcatport/springbanking 並用 Tomcat 服務器實際運行的端口替換 tomcatport。應當看到圖 1 所示的登錄屏幕。輸入用戶 ID “admin”和口令“password”,並按下登錄按鈕。其他用戶 ID 或口令會造成來自驗證服務的錯誤。

圖 1. Spring MVC 示例登錄屏幕

登錄成功之後,會看到圖 2 所示的帳戶細節頁面。

圖 2. Spring MVC 示例帳戶細節頁面

結束語

在三部分的 Spring 系列 的第三篇文章中,我介紹了 Spring MVC 框架的特性。我演示了如何配置和開發 Spring MVC 應用程序、如何配置 Spring MVC 控制器和向其中插入依賴項、如何用 JavaServer Pages 技術開發應用程序視圖,以及如何把自己的頁面與 Spring MVC 的視圖層集成。總結這篇文章時,我演示了如何在 Tomcat servlet 容器中部署應用程序以及如何在浏覽器中測試它。

文章來源:

http://www.ibm.com/developerworks/cn/java/wa-spring3/index.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved