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对于现在较成熟的Model-View-Control框架而言,其解决的主要问题无外乎下面几部分:
1》将web页面中的输入元素封装为一个(请求)数据对象。
2》根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
3》逻辑处理单元完成运算后,返回一个结果数据对象。
4》将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。
开发步骤:
首先新建web Project项目:MySpringMvc
1.加载项目所需要的jar包;
spring.jar -------------------------这个在spring2.5.6资源包的dist下面
spring-webmvc.jar---------------这个在spring2.5.6资源包的dist/module下面
2.配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
Xml代码  
<span style="font-size: large;"><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">  
<servlet>  
<servlet-name>dd</servlet-name>  
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
<!--     <init-param>-->  
<!--         <param-name>contextConfigLocation</param-name>-->  
<!--         <param-value>/WEB-INF/applicationContext.xml</param-value>-->  
<!--             </init-param>-->  
</servlet>  
<!--  
applicationContext.xml文件代表示应用程序服务的配置和 bean 配置。如果想装入多个配置文件,可以在  
<param-value>标记中用逗号作分隔符。  
springmvc配置文件与spring配置的servlet名称有关[如本配置中是dd]  
通常springmvc配置文件名称结构为:[servlet-name]-servlet.xml,  
如果你没有指定init-param里面contextCofigLocation的值中对应的XML文件的话  
(也就是applicationContext全局配置文件没有配置在web.xml中的话),那么像本  
段代码对应在springmvc中的配置文件就应该是/WEB-INF/dipatcher-servlet.xml这样的文件,  
否则如果配置了applicaitonContext.xml这样的spring全局配置文件,如本配置那么就必须为/WEB-INF/dd-servlet.xml  
-->  
<servlet-mapping>  
<servlet-name>dd</servlet-name>  
<url-pattern>*.do</url-pattern>  
</servlet-mapping>  
</web-app></span>  
Xml代码  
<span style="font-size: large;"><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">  
<servlet>  
<servlet-name>dd</servlet-name>  
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
<!--     <init-param>-->  
<!--         <param-name>contextConfigLocation</param-name>-->  
<!--         <param-value>/WEB-INF/applicationContext.xml</param-value>-->  
<!--             </init-param>-->  
</servlet>  
<!--  
applicationContext.xml文件代表示应用程序服务的配置和 bean 配置。如果想装入多个配置文件,可以在  
<param-value>标记中用逗号作分隔符。  
springmvc配置文件与spring配置的servlet名称有关[如本配置中是dd]  
通常springmvc配置文件名称结构为:[servlet-name]-servlet.xml,  
如果你没有指定init-param里面contextCofigLocation的值中对应的XML文件的话  
(也就是applicationContext全局配置文件没有配置在web.xml中的话),那么像本  
段代码对应在springmvc中的配置文件就应该是/WEB-INF/dipatcher-servlet.xml这样的文件,  
否则如果配置了applicaitonContext.xml这样的spring全局配置文件,如本配置那么就必须为/WEB-INF/dd-servlet.xml  
-->  
<servlet-mapping>  
<servlet-name>dd</servlet-name>  
<url-pattern>*.do</url-pattern>  
</servlet-mapping>  
</web-app></span>  
2.由于上面的初始化参数中没有指定名字的XML文件,因此在WEB-INF下面建立
dispatcher-servlet.xml 
Xml代码  
<span style="font-size: medium;"><span style="font-size: large;"><?xml version="1.0" encoding="UTF-8"?>  
<!--看到下面的beans这个元素标签没有,必须有标签的声明-->  
<beans  
xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
<!-- URL Mapping -->  
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
<property name="mappings">  
<props>  
<prop key="/regAction.do">regAction</prop>  
</props>  
</property>  
</bean>  
<!-- definition of View Resolver -->  
<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>/view/</value>  
</property>  
<property name="suffix">  
<value>.jsp</value>  
</property>  
</bean>  
<!-- formController ,这个formController可以配置也可以不配置-->  
<bean id="formController"  
class="org.springframework.web.servlet.mvc.ParameterizableViewController">  
<property name="viewName">  
<value>form</value>  
</property>  
</bean>  
<!-- Action Definition -->  
<bean id="regAction" class="org.lee.springmvc.demo.RegAction">  
<!--在MySpringMvc这个项目中就没有配置这个commandClass,  
因为它提前调用了setCommandClass(LoginForm.class)这个方法;这样跟下面效果一样  
不过还是建议配成下面这样的更好  
-->  
<property name="commandClass">  
<value>org.lee.springmvc.demo.RegInfo</value>  
</property>  
<property name="error_view">  
<value>error</value>  
</property>  
<property name="success_view">  
<value>success</value>  
</property>  
<property name="commandName">  
<value>myCommand</value>  
</property>  
</bean>  
</beans></span></span>  
Xml代码  
<span style="font-size: medium;"><span style="font-size: large;"><?xml version="1.0" encoding="UTF-8"?>  
<!--看到下面的beans这个元素标签没有,必须有标签的声明-->  
<beans  
xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
<!-- URL Mapping -->  
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
<property name="mappings">  
<props>  
<prop key="/regAction.do">regAction</prop>  
</props>  
</property>  
</bean>  
<!-- definition of View Resolver -->  
<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>/view/</value>  
</property>  
<property name="suffix">  
<value>.jsp</value>  
</property>  
</bean>  
<!-- formController ,这个formController可以配置也可以不配置-->  
<bean id="formController"  
class="org.springframework.web.servlet.mvc.ParameterizableViewController">  
<property name="viewName">  
<value>form</value>  
</property>  
</bean>  
<!-- Action Definition -->  
<bean id="regAction" class="org.lee.springmvc.demo.RegAction">  
<!--在MySpringMvc这个项目中就没有配置这个commandClass,  
因为它提前调用了setCommandClass(LoginForm.class)这个方法;这样跟下面效果一样  
不过还是建议配成下面这样的更好  
-->  
<property name="commandClass">  
<value>org.lee.springmvc.demo.RegInfo</value>  
</property>  
<property name="error_view">  
<value>error</value>  
</property>  
<property name="success_view">  
<value>success</value>  
</property>  
<property name="commandName">  
<value>myCommand</value>  
</property>  
</bean>  
</beans></span></span>  

3.建立JSP文件
form.jsp
Html代码  
<span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>  
<%@page pageEncoding="UTF-8"%>  
<%@taglib prefix="spring"   
uri="http://www.springframework.org/tags"%>  
<%@taglib prefix="c"   
uri="http://java.sun.com/jsp/jstl/core"%>  
<html>  
<head>  
<meta http-equiv="Content-Type"   
content="text/html; charset=UTF-8">  
<title>Login Form</title>  
</head>  
<body>  
<h1>登入表单</h1>  
<spring:bind path="command.*">   
<font color="red">  
<b>${status.errorMessage}</b>  
</font><br>   
</spring:bind>   
请输入使用者名称与密码:<p>   
<form name="loginform" action="login.do" method="post">   
<spring:bind path="command.userName">   
名称 <input type="text" name="${status.expression}" value="${status.value}"/>  
<font color="red"><c:out value="${status.errorMessage}" /></font><br/>  
</spring:bind>   
<spring:bind path="command.password">   
密码 <input type="password" name="${status.expression}" value="${status.value}"/>  
<font color="red"><c:out value="${status.errorMessage}" /></font><br/>  
</spring:bind>   
<input type="submit" value="确定"/>   
</form>   
注意:输入错误会再回到这个页面中。        
</body>  
</html></span></span>  
Html代码  
<span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>  
<%@page pageEncoding="UTF-8"%>  
<%@taglib prefix="spring"   
uri="http://www.springframework.org/tags"%>  
<%@taglib prefix="c"   
uri="http://java.sun.com/jsp/jstl/core"%>  
<html>  
<head>  
<meta http-equiv="Content-Type"   
content="text/html; charset=UTF-8">  
<title>Login Form</title>  
</head>  
<body>  
<h1>登入表单</h1>  
<spring:bind path="command.*">   
<font color="red">  
<b>${status.errorMessage}</b>  
</font><br>   
</spring:bind>   
请输入使用者名称与密码:<p>   
<form name="loginform" action="login.do" method="post">   
<spring:bind path="command.userName">   
名称 <input type="text" name="${status.expression}" value="${status.value}"/>  
<font color="red"><c:out value="${status.errorMessage}" /></font><br/>  
</spring:bind>   
<spring:bind path="command.password">   
密码 <input type="password" name="${status.expression}" value="${status.value}"/>  
<font color="red"><c:out value="${status.errorMessage}" /></font><br/>  
</spring:bind>   
<input type="submit" value="确定"/>   
</form>   
注意:输入错误会再回到这个页面中。        
</body>  
</html></span></span>  

4.建立jsp文件
success.jsp
Html代码  
<span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>  
<%@page pageEncoding="GBK"%>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=GBK">  
<title>登入成功</title>  
</head>  
<body>  
<H1>哈啰! ${welcomeuser}!!</H1>   
这是您的神秘礼物!^o^<a href="login.do">退出登录</a>  
</body>  
</html></span></span>  
Html代码  
<span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>  
<%@page pageEncoding="GBK"%>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=GBK">  
<title>登入成功</title>  
</head>  
<body>  
<H1>哈啰! ${welcomeuser}!!</H1>   
这是您的神秘礼物!^o^<a href="login.do">退出登录</a>  
</body>  
</html></span></span>  

5.建立一个java bean LoginForm.java
Java代码  
<span style="font-size: medium;"><span style="font-size: large;">package zz.it.beans;  
public class LoginForm {  
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;  
}  
}  
</span></span>  
Java代码  
<span style="font-size: medium;"><span style="font-size: large;">package zz.it.beans;  
public class LoginForm {  
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;  
}  
}  
</span></span>  

6.建立controller LoginController.java
Java代码  
<span style="font-size: medium;"><span style="font-size: large;">
package zz.it.controller;  
import org.springframework.validation.BindException;  
import org.springframework.web.servlet.ModelAndView;  
import org.springframework.web.servlet.mvc.SimpleFormController;  
import zz.it.beans.LoginForm;  
public class LoginController extends SimpleFormController {  
/** 
* 构造方法 
*/  
public LoginController() {  
// TODO Auto-generated constructor stub  
//setCommandClass(LoginForm.class);   
//这句话要是不写的话,那么在dd-servlet.xml中的loginController里面配置上如下:  
// <property name="commandClass">  
//<value>zz.it.beans.LoginForm</value>  
//</property>  
//这样效果也是一样的  
}  
public ModelAndView onSubmit(Object cmd, BindException errors) {  
LoginForm loginForm = (LoginForm) cmd;  
if (loginForm.getUserName().equals("test")  
&& loginForm.getPassword().equals("test")) {  
return new ModelAndView(getSuccessView(), "welcomeuser", loginForm  
.getUserName());  
} else {  
errors.reject("ccc", "用户名或密码有误!");  
errors.rejectValue("userName", "nameErr", null, "用户名错误");  
errors.rejectValue("password", "passErr", null, "密码错误");  
return new ModelAndView(getFormView(), errors.getModel());  
}  
}  
}  

</span></span>  
Java代码  
<span style="font-size: medium;"><span style="font-size: large;">
package zz.it.controller;  
import org.springframework.validation.BindException;  
import org.springframework.web.servlet.ModelAndView;  
import org.springframework.web.servlet.mvc.SimpleFormController;  
import zz.it.beans.LoginForm;  
public class LoginController extends SimpleFormController {  
/** 
* 构造方法 
*/  
public LoginController() {  
// TODO Auto-generated constructor stub  
//setCommandClass(LoginForm.class);   
//这句话要是不写的话,那么在dd-servlet.xml中的loginController里面配置上如下:  
// <property name="commandClass">  
//<value>zz.it.beans.LoginForm</value>  
//</property>  
//这样效果也是一样的  
}  
public ModelAndView onSubmit(Object cmd, BindException errors) {  
LoginForm loginForm = (LoginForm) cmd;  
if (loginForm.getUserName().equals("test")  
&& loginForm.getPassword().equals("test")) {  
return new ModelAndView(getSuccessView(), "welcomeuser", loginForm  
.getUserName());  
} else {  
errors.reject("ccc", "用户名或密码有误!");  
errors.rejectValue("userName", "nameErr", null, "用户名错误");  
errors.rejectValue("password", "passErr", null, "密码错误");  
return new ModelAndView(getFormView(), errors.getModel());  
}  
}  
}  

</span></span>  
7.最后,整合部署,访问http://localhost:1234/MySpringMvc/login.do  
效果图
初始登录界面
登录成功页面
登录失败页面
我估计初学者,最关心的大都有这两个问题
1.这个controller是怎样像struts那样进行封装数据的
2.<spring:bind>为什么这么用,为什么取值只能是command.xxx
关于这两个,我将在下篇文章中继续来解释

转载于:https://www.cnblogs.com/huapox/archive/2012/09/01/3251575.html

SpringMVC入门实例及详细讲解相关推荐

  1. HTML5div css入门案例,div+css教学教案(学习入门到精通~)详细讲解.doc

    | div+cssHYPERLINK "/"教程(入门到精通) 目录: 一.div+css教程(入门到精通)详细讲解 二.DIV+CSS网页布局常用基础知识 三.div+css常用 ...

  2. 在html语言中建立网页链接,HTML代码实例:详细讲解超级链接

    HTML代码实例:详细讲解超级链接 互联网   发布时间:2009-04-02 20:55:27   作者:佚名   我要评论 超级链接是网站中使用比较频繁的HTML元素,因为网站的各种页面都是由超级 ...

  3. 【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)

    上篇博文,我们简单的介绍了什么是SpringMVC,这篇博文,我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入. 环境准备 我们需要有基本 ...

  4. Spring+EhCache缓存实例(详细讲解+源码下载)

    转载注明出处http://blog.csdn.net/u013142781 一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的 ...

  5. spring 3.0 应用springmvc 构造RESTful URL 详细讲解

    在线springmvc_rest demo 由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建. 并碰到了一下问题. springmvc 3 ...

  6. IDEA 中使用 maven 开发 SpringMVC 入门实例

    前言 断断续续的接触了两周的 Spring MVC 框架,不知从何处下手.在查阅了各种书籍文献,改了无数个bug之后,总算是写出了一个 Hello World . 下面作为实例展示的是一个简单的 Sp ...

  7. 【转】HTML代码实例:详细讲解超级链接

    [转]http://www.jb51.net/web/12412.html 超级链接是网站中使用比较频繁的HTML元素,因为网站的各种页面都是由超级链接串接而成,超级链接完成了页面之间的跳转.超级链接 ...

  8. HTML代码实例:详细讲解超级链接--网页制作

    [转]http://www.webjx.com/html-xhtml/webxhtml-10153.html 超级链接是网站中使用比较频繁的HTML元素,因为网站的各种页面都是由超级链接串接而成,超级 ...

  9. Linux基本命令一分钟学会过目不忘实例指导详细讲解

    由于很多人刚刚就接触Linux就接触一大串的命令,有些还不懂用法,用完过后马上就会忘记,在此奉上Linux基本命令的梳理总结,为方便记忆理解加上命名规则及使用实例. Linux命令有很多很多,若需要跟 ...

  10. Nginx 理论+实例超详细讲解

    文章目录 一.nginx简介 二.nginx.的特性与优点 1.nginx特性 2.nginx的优点 三.nginx的功能及应用类别 1.nginx的基本功能 2.nginx的扩展功能 3.nginx ...

最新文章

  1. 惠普10亿美元锻造Helion云品牌
  2. 海量数据处理专题(六)——双层桶划分
  3. php mysql文件缓存_PHP文件缓存类实现代码
  4. AndroidTv Home界面实现原理(二)——Leanback 库的主页卡位缩放动画源码解析
  5. Java(Android)线程池
  6. Android 使用ViewPager实现导航页面
  7. 黑苹果16g内存够用吗_现阶段最便宜的完美黑苹果配置是什么?
  8. Length of Last Word
  9. power系列服务器问题PA模板,与 Power BI 报表服务器集成
  10. 福昕高级PDF 专业版程序安装及注意事项
  11. 好玩,AI 让老照片动起来(附 APP 软件地址)
  12. python调用excel宏函数,封装
  13. 《Windows程序设计》学习笔记(chap10菜单及其它资源)(一)
  14. 基佬大乱斗自建服务器,玩家必看干货基佬大乱斗怎么联机实现双人作战
  15. 离线底图瓦片,可用于Cesium加载使用【图说GIS】
  16. SimpleDateFormate日期字符串转换(墨雪亲测)
  17. 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day10-字符串
  18. 【原创】【SPI】SPI通信协议介绍
  19. 没有gpedit.msc这个文件获取管理员权限
  20. 云服务器liunx系统怎么安装,云服务器怎么安装linux系统

热门文章

  1. 守护进程-----杀死自己的进程再重新启动自己
  2. 跨域两种解决方案CORS以及JSONP
  3. 关于URL大小写问题
  4. 01-bilibilidemo配置
  5. Android 使用 DownloadManager 管理系统下载任务的方法,android管理系统
  6. 【Zookeeper学习】Zookeeper-3.4.6安装部署
  7. MaxtoCode 2.0 7月1日发布 测试版
  8. 用python重温统计学基础:描述性统计分析
  9. 洛谷P4135 作诗 --分块基础
  10. for循环与foreach的性能比较