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的完全的功能,去除了Struts中OGNL和Struts标签,在web的应用性能上有明显提升,展示了一个较为轻捷的MVC开发框架。在本文中,仅对Spring MVC的基本使用及原理做了分析和介绍,至于Spring MVC的其他功能配置有待研究。