在 Spring 系列 的第
部分中
我介紹 Spring MVC 框架
就像在以前的文章中一樣
我用銀行示例介紹如何建模和構建簡單的應用程序
示例應用程序包含了已經學過的一些技術(例如依賴注入)
但是主要演示 Spring MVC 的特性
在開始之前
請 下載這篇文章的源代碼
請參閱 參考資料 訪問 Spring 框架和 Tomcat
運行示例需要它們
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 文件中注冊所有配置
清單
顯示了如何配置 sampleBankingServlet
清單
配置 Spring MVC DispatcherServlet
<servlet>
<servlet
name>sampleBankingServlet</servlet
name>
<servlet
class>
org
springframework
we
servlet
DispatcherServlet
<servlet
class>
<load
on
startup>
<load
on
startup>
<servlet>
DispatcherServlet 從一個 XML 文件裝入 Spring 應用程序上下文
XML 文件的名稱是 servlet 的名稱後面加上
servlet
在這個示例中
DispatcherServlet 會從 sampleBankingServlet
servlet
xml 文件裝入應用程序上下文
配置應用程序的 URL 下一步是配置想讓 sampleBankingServlet 處理的 URL
同樣
還是要在 web
xml 中注冊所有這些信息
清單
配置想要處理的 URL
<servlet
mapping>
<servlet
name> sampleBankingServlet<servlet
name>
<url
pattern>*
jsp</url
pattern>
</servlet
mapping>
裝入配置文件 下面
裝入配置文件
為了做到這點
請為 Servlet
規范注冊 ContextLoaderListener 或為 Servlet
及以下的容器注冊 ContextLoaderServlet
為了保障後向兼容性
請用 ContextLoaderServlet
在啟動 Web 應用程序時
ContextLoaderServlet 會裝入 Spring 配置文件
清單
注冊了 ContextLoaderServlet
清單
注冊 ContextLoaderServlet
<servlet>
<servlet
name>context>servlet
name>
<servlet
class>
org
sprntext
ContextLoaderServlet
</servlet
class>
<load
on
startup>
</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 服務進行驗證
並執行帳戶活動
配置視圖屬性
一節中的 清單
描述了如何把 AuthenticationService 和 AccountServices 連接到 LoginBankController
清單
顯示了 LoginBankController 的代碼
配置視圖屬性 下面
我必須注冊在接收到 HTTP GET 請求時顯示的頁面
我在 Spring 配置中用 formView 屬性注冊這個頁面
如清單
所示
sucessView 屬性代表表單數據提交而且 doSubmitAction() 方法中的邏輯成功執行之後顯示的頁面
formView 和 sucessView 屬性都代表被定義的視圖的邏輯名稱
邏輯名稱映射到實際的視圖頁面
清單
注冊 LoginBankController
<bean id=
loginBankController
class=
ntroller
LoginBankController
>
<property name=
sessionForm
><value>true</value></property>
<property name=
commandName
><value>loginCommand</value></property>
<property name=
commandClass
>
<value>mands
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
如 清單
所示
因為我在 JSP 頁面中使用了 JSTL 標記
所以用戶的登錄名稱解析成資源 /jsp/login
jsp
而 viewClass 成為 JstlView
驗證和帳戶服務 就像前面提到的
LoginBankController 內部連接了 Spring 的 AccountServices 和 AuthenticationService
AuthenticationService 類處理銀行應用程序的驗證
AccountServices 類處理典型的銀行服務
例如查找交易和電匯
清單
顯示了銀行應用程序的驗證和帳戶服務的配置
清單
配置驗證和帳戶服務
<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
exe 並運行它把 Tomcat 安裝到自己喜歡的任何位置
例如 c:\tomcat
接下來
下載示例代碼 並釋放到驅動器(例如 c:\ )上
創建了 Spring 項目的文件夾之後
打開它並把 spring
banking 子文件夾拷貝到 c:\tomvat
\webapps
spring
banking 文件夾是一個 Web 檔案
裡面包含 Spring MVC 示例應用程序
lib 文件夾包含應用程序需要的 Spring 框架
與Spring 相關的 MVC 庫以及 JSTL 標記庫和 jar 文件
要啟動 Tomcat 服務器
請使用以下命令
cd bin C:\Tomcat
\bin> catalina
bat start
Tomcat 應當啟動並部署 Spring MVC 示例應用程序
<
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28727.html