2008-05-10

Spring之MVC 入门实例

关键字: spring之mvc 入门实例
对于现有较成熟的Struts、Webwork(MVC)框架而言,,其解决的主要问题无外乎下面几部分:
1、将Web页面中的输入元素封装为一个(请求)数据对象。
2、根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
3、逻辑处理单元完成运算后,返回一个结果数据对象。
4、将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。
各个MVC实现固然存在差异,但其中的关键流程大致如上。结合一个实例,看看这
几个关键流程在Spring MVC框架中的处理手法。

开发环境: Apache Tomcat 6.0.16 + MyEclipse6.0.1 + spring2.5.3
实现功能:用户登录,校验用户名和密码,如果正确返回成功页面上显示登陆信息
准备工作:下载spring-framework-2.5.3的完整包(http://www.springframework.org/download)

1、启动MyEclipse新建web项目(这里起名为springmvc),为项目添加spring支持的类库(spring.jar和spring-webmvc.jar)
这里,项目用到了jstl标签,所以也要把它添加进去!!!

2、为web.xml配置分发器
DispatcherServlet是Spring MVC的入口,所有进入Spring Web的Request都经过DispatcherServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  <display-name>springmvc</display-name>  
  <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>

这样,请求 .do 的处理就全部交由Spring处理了

3、/WEB-INF/Config.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC  "-//SPRING//DTD BEAN//EN" 
 "http://www.springframework.org/dtd/spring-beans.dtd">  
<beans>
	<!-- 配置试图解析器 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<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>	
	<!-- 配置映射响应器 -->
	<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">              
  			<props> 
   				<prop key="/index.do">LoginAction</prop> 
  			</props> 
		</property> 
	</bean>	
	<!-- 配置控制器 -->
	<bean id="LoginAction" class= "com.yd.springmvc.action.LoginAction">
		<property name="commandClass">             
			<value>com.yd.springmvc.action.LoginInfo</value> 
		</property>
		<property name="formView" value="index" />
		<property name="successView" value="main" />  
	</bean>
</beans>


4、简单的JavaBean:LoginInfo
package com.yd.springmvc.action;

public class LoginInfo {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	} 
}


5、业务逻辑处理:LoginAction
package com.yd.springmvc.action;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class LoginAction extends SimpleFormController {

	@Override
	protected ModelAndView onSubmit(HttpServletRequest request,
			HttpServletResponse response, Object cmd, BindException ex)
			throws Exception {		
		LoginInfo loginInfo = (LoginInfo) cmd;
		if (!"yaodi".equals(loginInfo.getUsername())) {
			ex.rejectValue("username", "usernameerror", "姓名错误!!!");
			return this.showForm(request, response, ex);
		}
		if (!"123456".equals(loginInfo.getPassword())) {
			ex.rejectValue("password", "passworderror", "密码错误!!!");
			return this.showForm(request, response, ex);
		}
		HashMap result = new HashMap();		
		result.put("loginInfo", loginInfo); 		
		List msgList = new LinkedList(); 			
		msgList.add("user1"); 
		msgList.add("user2"); 
		msgList.add("user3"); 
		result.put("msgList", msgList); 		
		return new ModelAndView(this.getSuccessView(), result);//返回界面由指定的结果数据集加以填充
	}
}

onSubmit方法用于处理业务请求包含了两个参数:Object cmd(Object型参数,正是传入的请求数据对象的引用)和BindException ex(参数则提供了数据绑定错误的跟踪机制)

6、登陆页:/WEB-INF/view/index.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt"	uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn"	uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<html>
  <head>    
    <title>登陆页</title>
  </head> 
  <body>  
  <h2>登陆</h2><hr>	  
  <form method="post">      
	  <p>
	  	姓名:
	  	<spring:bind path="command.username">
		<input type="text" name="username" value="${status.value}">
		<c:forEach items="${status.errorMessages}" var="error">
			<font color="#FF0000">*错误: ${error}</font>
		</c:forEach>
		</spring:bind>
      </p>
	  <p>
	    密码:
	    <spring:bind path="command.password">
	    <input type="password" name="password" />
	    <c:forEach items="${status.errorMessages}" var="error">
			<font color="#FF0000">*错误: ${error}</font>
		</c:forEach>
	    </spring:bind>
      </p>
	  <p>
	    <input type="submit" name="Submit" value="提交" />  
        <input type="reset" name="Submit2" value="重置" />
      </p>
  </form>  
  </body>
</html>


7、成功页:/WEB-INF/view/main.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>

<html>
	<head>
		<title>成功页</title>		
	</head>
	<body>
	<h2>欢迎登陆:</h2>
	姓名:<c:out value="${loginInfo.username}" /><br>
	密码:<c:out value="${loginInfo.password}" />
	<h2>当前信息:</h2>
	<c:forEach items="${msgList}" var="item">
		${item}<br>
	</c:forEach>
	</body>
</html>


8、这样我们就成功地建立了一个mvc应用,访问http://loaclhost:8888/springmvc/index.do
  • springmvc.rar (12.4 KB)
  • 描述: 附件为本人做好的例子
  • 下载次数: 43
评论
zt843217 2008-06-23
你这例子根本都跑不起来啊!!!!!!!!!!!!!!!!!
发表评论

您还没有登录,请登录后发表评论

yaodi0818
搜索本博客
我的相册
7e768c60-92fc-3f2c-80ab-3997aa55a7f7-thumb
快速理解面向对象
共 2 张
最近加入圈子
存档
最新评论