1、在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等。
 
2、在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的返回数据与视图相融合,返回最终的显示界
面。
3、控制器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());
       }
    }
……
}
4、视图
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的完全的功能,去除了StrutsOGNLStruts标签,在web的应用性能上有明显提升,展示了一个较为轻捷的MVC开发框架。在本文中,仅对Spring MVC的基本使用及原理做了分析和介绍,至于Spring MVC的其他功能配置有待研究。