一、在web.xml中配置DispatcherServlet
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4"
>
<servlet>
⑴
<servlet-name>
Dispatcher
</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
/WEB-INF/Config.xml
</param-value>
</init-param>
</servlet>
<servlet-mapping>
⑵
<servlet-name>
Dispatcher
</servlet-name>
<url-pattern>
*.do
</url-pattern>
</servlet-mapping>
</web-app>
⑴
Servlet定義
這裏定義了請求分發Servlet,即:org.springframework.web.servlet.DispatcherServletDispatcherServlet 是Spring MVC 中負責請求調度的核心引擎,全部的請求將由此Servlet 根據配置分發至各個邏輯處理單元。其內部同時也維護了一個ApplicationContext實例。咱們在<init-param>節點中配置了名爲「contextConfigLocation」的Servlet參數,此參數指定了Spring配置文件的位置「/WEB-INF/Config.xml」。若是忽略此設定,則默認爲「/WEB-INF/<servlet name>-servlet.xml」,其中<servlet name>以Servlet 名替換(在當前環境下,默認值也就是「/WEB-INF/Dispatcher-servlet.xml)。
⑵ 請求映射
將全部以.do結尾的請求交給Spring MVC進行處理。固然,也能夠設爲其餘值如.action、.action等。
二、在config.xml中配置Spring MVC所需的核心模塊。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
SpringFrameWork Developer’s Guide Version 0.6
September 2, 2004 So many open source projects. Why not
Open your
Documents?
<beans>
<!--Definition of View Resolver -->
<bean id="viewResolver"
⑴
class="org.springframework.web.servlet.view.InternalResou
rceViewResolver"
>
<property name="viewClass"
>
⑵
<value>
org.springframework.web.servlet.view.JstlView
</value>
</property>
<property name="prefix"
>
⑶
<value>
/WEB-INF/view/
</value>
</property>
<property name="suffix"
>
⑷
<value>
.jsp
</value>
</ property>
</bean>
<!--Request Mapping -->
<bean id="urlMapping"
⑸
class="org.springframework.web.servlet.handler.SimpleUr
lHandlerMapping"
>
<property name="mappings"
>
<props>
<prop key="/login.do"
>
LoginAction
</prop>
</props>
</property>
</bean>
<!---Action Definition-->
<bean id="LoginAction"
⑹
class="com.travelsky.springMVC.action.LoginAction"
>
<property name="commandClass"
>
⑺
<value>
com.travelsky.springMVC.action.LoginInfo
</value>
</property>
<property name="fail_view"
>
⑻
<value>
loginfail
</value>
</property>
<property name="success_view"
>
<value>
main
</value>
</property>
</bean>
</beans>
⑴
Resolver設定
Resolver將把輸出結果與輸出界面相融合,爲表現層提供呈現資源。
⑵ View Resolver的viewClass參數
這裏使用JSP頁面做爲輸出,所以,設定爲:org.springframework.web.servlet.view.JstlView
其他可選的viewClass還有:
Ø org.springframework.web.servlet.view.freemarker.FreeMarkerView(用於基於FreeMarker模板的表現層實現)
Ø org.springframework.web.servlet.view.velocity.VelocityView(用於基於velocity模板的表現層實現)等。
⑶ ⑷ View Resolver的prefix和suffix參數
指定了表現層資源的前綴和後綴,運行時,Spring 將爲指定的表現層資源自動追加前綴和後綴,以造成一個完整的資源路徑。另參見⑻
⑸ 「請求/處理單元」關係映射
能夠看到,這裏咱們將「/login.do」請求映射處處理單元LoginAction。<props>節點下能夠有多個映射關係存在,目前咱們只定義了一個。
⑹ LoginAction定義
這裏定義了邏輯處理單元LoginAction 的具體實現,這裏,LoginAction 的實現類爲com.travelsky.springMVC.action.LoginAction。
⑺ LoginAction的請求數據對象
commandClass 參數源於LoginAction 的基類BaseCommandController,BaseCommandControlle 包含了請求數據封裝和驗證方法( BaseCommandController.bindAndValidate ) , 它將根據傳入的HttpServletRequest構造請求數據對象。這裏咱們指定commandClass 爲com.travelsky.springMVC.action.LoginInfo,這是一個很是簡單的Java Bean,它封裝了登陸請求所需的數據內容:
public
class LoginInfo {
private String username;
private String password;
public String getPassword() {
return password;
}
public
void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public
void setUsername(String username) {
this.username = username;
}
}
⑻返回視圖定義
對於這裏的LoginAction 而言,有兩種返回結果,即登陸失敗時返回錯誤界面,登
錄成功時進入系統主界面。
對應咱們配置了fail_view、success_view兩個自定義參數。
參數值將由Resolver進行處理,爲其加上前綴後綴,如對於fail_view而言,實
際的視圖路徑爲/WEB-INF/view/loginfail.jsp。
以後,Resolver 會將LoginAction的返回數據與視圖相融合,返回最終的顯示界
面。
三、控制器LoginAction實現
public
class LoginAction
extends
SimpleFormController {
private String fail_view;
private String success_view;
……
//處理業務操做
@SuppressWarnings("unchecked")
protected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Object cmd, BindException ex)
throws Exception {
LoginInfo loginInfo = (LoginInfo) cmd;
if (login(loginInfo) == 0) {
HashMap result_map =
new
HashMap();
result_map.put("logininfo", loginInfo);
List msgList =
new
LinkedList();
msgList.add("msg1");
msgList.add("msg2");
msgList.add("msg3");
result_map.put("messages", msgList);
//返回模型視圖對象,提供解析器處理
return
new ModelAndView(
this.getSuccess_view(), result_map);
}
else {
return
new ModelAndView(
this.getFail_view());
}
}
……
}
四、視圖
Index.jsp
<body>
<form
action="login.do" method="post" >
<p
align="center">
登陸
</p>
<div
align="center">
<br>
用戶名:
<input
type="text" name="username">
<br><br>
密 碼 :
<input
type="password" name="password">
<br>
<p>
<input
type="submit" value="
提交
"
name="B1">
<input
type="reset" value="
重置
"
name="B2">
</p>
</div>
</form>
</body>
Main.jsp
<body>
<p>
Login Success!!!
</p>
<p>
Current User:
<c:out
value="${logininfo.username}" />
<br>
</p>
<p>
Your current messages:
</p>
<c:forEach
items="${messages}" var="item" begin="0" end="9" step="1"
varStatus="var">
<c:if
test="${var.index % 2 == 0}">
*
</c:if>
${item}<br>
</c:forEach>
</body>
Spring MVC提供了WEB MVC的開發框架,與輕量級Spring結合,實現了一套MVC的開發機制,同時擁有本身的不少特性。其在架構實現方面,與Struts很類似,但其沒有實現struts的徹底的功能,去除了Struts中OGNL和Struts標籤,在web的應用性能上有明顯提高,展現了一個較爲輕捷的MVC開發框架。在本文中,僅對Spring MVC的基本使用及原理作了分析和介紹,至於Spring MVC的其餘功能配置有待研究。
java