SpringMVC入门实例及详细讲解

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代码 
 

  1. <span style="font-size: large;"><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  3. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

  4. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  5. <servlet>

  6. <servlet-name>dd</servlet-name>

  7. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

  8. <!--     <init-param>-->

  9. <!--         <param-name>contextConfigLocation</param-name>-->

  10. <!--         <param-value>/WEB-INF/applicationContext.xml</param-value>-->

  11. <!--             </init-param>-->

  12. </servlet>

  13. <!--

  14. applicationContext.xml文件代表示应用程序服务的配置和 bean 配置。如果想装入多个配置文件,可以在

  15. <param-value>标记中用逗号作分隔符。

  16. springmvc配置文件与spring配置的servlet名称有关[如本配置中是dd]

  17. 通常springmvc配置文件名称结构为:[servlet-name]-servlet.xml,

  18. 如果你没有指定init-param里面contextCofigLocation的值中对应的XML文件的话

  19. (也就是applicationContext全局配置文件没有配置在web.xml中的话),那么像本

  20. 段代码对应在springmvc中的配置文件就应该是/WEB-INF/dipatcher-servlet.xml这样的文件,

  21. 否则如果配置了applicaitonContext.xml这样的spring全局配置文件,如本配置那么就必须为/WEB-INF/dd-servlet.xml

  22. -->

  23. <servlet-mapping>

  24. <servlet-name>dd</servlet-name>

  25. <url-pattern>*.do</url-pattern>

  26. </servlet-mapping>

  27. </web-app></span>

2.由于上面的初始化参数中没有指定名字的XML文件,因此在WEB-INF下面建立

dispatcher-servlet.xml

Xml代码 
 

  1. <span style="font-size: medium;"><span style="font-size: large;"><?xml version="1.0" encoding="UTF-8"?>

  2. <!--看到下面的beans这个元素标签没有,必须有标签的声明-->

  3. <beans

  4. xmlns="http://www.springframework.org/schema/beans"

  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
  7. <!-- URL Mapping -->

  8. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

  9. <property name="mappings">

  10. <props>

  11. <prop key="/regAction.do">regAction</prop>

  12. </props>

  13. </property>

  14. </bean>
  15. <!-- definition of View Resolver -->

  16. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

  17. <property name="viewClass">

  18. <value>org.springframework.web.servlet.view.JstlView</value>

  19. </property>

  20. <property name="prefix">

  21. <value>/view/</value>

  22. </property>

  23. <property name="suffix">

  24. <value>.jsp</value>

  25. </property>

  26. </bean>

  27. <!-- formController ,这个formController可以配置也可以不配置-->

  28. <bean id="formController"

  29. class="org.springframework.web.servlet.mvc.ParameterizableViewController">

  30. <property name="viewName">

  31. <value>form</value>

  32. </property>

  33. </bean>
  34. <!-- Action Definition -->

  35. <bean id="regAction" class="org.lee.springmvc.demo.RegAction">

  36. <!--在MySpringMvc这个项目中就没有配置这个commandClass,

  37. 因为它提前调用了setCommandClass(LoginForm.class)这个方法;这样跟下面效果一样

  38. 不过还是建议配成下面这样的更好

  39. -->

  40. <property name="commandClass">

  41. <value>org.lee.springmvc.demo.RegInfo</value>

  42. </property>

  43. <property name="error_view">

  44. <value>error</value>

  45. </property>

  46. <property name="success_view">

  47. <value>success</value>

  48. </property>

  49. <property name="commandName">

  50. <value>myCommand</value>

  51. </property>

  52. </bean>

  53. </beans></span></span>

 3.建立JSP文件

form.jsp

Html代码 
 

  1. <span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>

  2. <%@page pageEncoding="UTF-8"%>

  3. <%@taglib prefix="spring"

  4. uri="http://www.springframework.org/tags"%>
  5. <%@taglib prefix="c"

  6. uri="http://java.sun.com/jsp/jstl/core"%>

  7. <html>

  8. <head>

  9. <meta http-equiv="Content-Type"

  10. content="text/html; charset=UTF-8">

  11. <title>Login Form</title>

  12. </head>

  13. <body>

  14. <h1>登入表单</h1>

  15. <spring:bind path="command.*">

  16. <font color="red">

  17. <b>${status.errorMessage}</b>

  18. </font><br>

  19. </spring:bind>
  20. 请输入使用者名称与密码:<p>

  21. <form name="loginform" action="login.do" method="post">
  22. <spring:bind path="command.userName">

  23. 名称 <input type="text" name="${status.expression}" value="${status.value}"/>

  24. <font color="red"><c:out value="${status.errorMessage}" /></font><br/>
  25. </spring:bind>
  26. <spring:bind path="command.password">

  27. 密码 <input type="password" name="${status.expression}" value="${status.value}"/>

  28. <font color="red"><c:out value="${status.errorMessage}" /></font><br/>

  29. </spring:bind>
  30. <input type="submit" value="确定"/>

  31. </form>

  32. 注意:输入错误会再回到这个页面中。

  33. </body>

  34. </html></span></span>

 4.建立jsp文件
success.jsp

Html代码 
 

  1. <span style="font-size: medium;"><span style="font-size: large;"><%@page contentType="text/html"%>

  2. <%@page pageEncoding="GBK"%>
  3. <html>

  4. <head>

  5. <meta http-equiv="Content-Type" content="text/html; charset=GBK">

  6. <title>登入成功</title>

  7. </head>

  8. <body>

  9. <H1>哈啰! ${welcomeuser}!!</H1>

  10. 这是您的神秘礼物!^o^<a href="login.do">退出登录</a>

  11. </body>

  12. </html></span></span>

5.建立一个java bean
LoginForm.java

Java代码 
 

  1. <span style="font-size: medium;"><span style="font-size: large;">package zz.it.beans;
  2. public class LoginForm {

  3. private String userName;

  4. private String password;
  5. public String getPassword() {

  6. return password;

  7. }
  8. public void setPassword(String password) {

  9. this.password = password;

  10. }
  11. public String getUserName() {

  12. return userName;

  13. }
  14. public void setUserName(String userName) {

  15. this.userName = userName;

  16. }
  17. }

  18. </span></span>

6.建立controller
LoginController.java

Java代码 
 

  1. <span style="font-size: medium;"><span style="font-size: large;">package zz.it.controller;
  2. import org.springframework.validation.BindException;

  3. import org.springframework.web.servlet.ModelAndView;

  4. import org.springframework.web.servlet.mvc.SimpleFormController;
  5. import zz.it.beans.LoginForm;
  6. public class LoginController extends SimpleFormController {

  7. /**

  8. * 构造方法

  9. */

  10. public LoginController() {

  11. // TODO Auto-generated constructor stub

  12. //setCommandClass(LoginForm.class);

  13. //这句话要是不写的话,那么在dd-servlet.xml中的loginController里面配置上如下:

  14. // <property name="commandClass">

  15. //<value>zz.it.beans.LoginForm</value>

  16. //</property>

  17. //这样效果也是一样的

  18. }
  19. public ModelAndView onSubmit(Object cmd, BindException errors) {

  20. LoginForm loginForm = (LoginForm) cmd;

  21. if (loginForm.getUserName().equals("test")

  22. && loginForm.getPassword().equals("test")) {

  23. return new ModelAndView(getSuccessView(), "welcomeuser", loginForm

  24. .getUserName());

  25. } else {

  26. errors.reject("ccc", "用户名或密码有误!");

  27. errors.rejectValue("userName", "nameErr", null, "用户名错误");

  28. errors.rejectValue("password", "passErr", null, "密码错误");

  29. return new ModelAndView(getFormView(), errors.getModel());

  30. }

  31. }

  32. }

  33. </span></span>

7.最后,整合部署,访问http://localhost:1234/MySpringMvc/login.do

效果图

初始登录界面


 

 登录成功页面


 

    登录失败页面

我估计初学者,最关心的大都有这两个问题

1.这个controller是怎样像struts那样进行封装数据的

2.<spring:bind>为什么这么用,为什么取值只能是command.xxx

时间: 2024-10-05 13:24:55

SpringMVC入门实例及详细讲解的相关文章

Spring-MVC入门实例 (一)

Spring MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀. Struts2 VS  Spring MVC Struts2  特点 也是比较优秀的MVC构架,优点非常多比如良好的结构.但这里想说的是缺点,Struts2由于采用了值栈.OGNL表达式.struts2标签库等,会导致应用的性能下降.Struts2的多层拦截器.多实例action性能都很好

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

上篇博文,我们简单的介绍了什么是SpringMVC,这篇博文,我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入. 环境准备 我们需要有基本的java环境,下面只是简单的罗列,不再详细的介绍. jdk1.6以上 eclipse或者myEclipse tomcat6以上 我们使用SpringMVC的版本是Spring3.2.0,下图是最基本的jar包: 在Spring的官方API文档中,给出了所有jar包作用的概述,现列举常用的包以及相关

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

一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点. 优点: 1. 快速 2. 简单 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 

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

一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点. 优点: 1. 快速 2. 简单 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题

SpringMVC 框架系列之初识与入门实例

SpringMVC 框架系列之初识与入门实例 1.SpringMVC 概述 (1).什么是 MVC:Model-View-Control Control 层属于框架性质,完成的主要工作是:封装 web 请求为一个数据对象.调用业务逻辑层来处理数据对象.返回处理数据结果及相应的视图给客户端. (2).什么是 SpringMVC Spring mvc 和 Struts2 都属于表现层的框架,是 Spring 框架的一部分,Spring 框架的 Control 层的核心是 DispatcherServ

SpringMVC详解(三)------基于注解的入门实例

前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能这样来进行开发的.那么这篇博客我们就讲解实际开发中用的最多的基于注解配置的SpringMVC配置. 本篇博客源码下载 项目结构为: 1.在 web.xml 文件中配置前端处理器 <?xml version="1.0" encoding="UTF-8"?> &

SpringMVC应用------基于注解的入门实例

SpringMVC应用------基于注解的入门实例 目录 1.在 web.xml 文件中配置前端处理器 2.在 springmvc.xml 文件中配置处理器映射器,处理器适配器,视图解析器 3.编写 Handler 4.编写 视图 index.jsp 5.在浏览器中输入:http://localhost:8080/SpringMVC-003/hello 前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个

Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附详细代码] 标签: SparkECLIPSEJAVAMAVENwindows 2016-06-18 22:35 405人阅读 评论(0) 收藏 举报  分类: spark(5)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言 本文旨在记录初学Spark时,根据官网快速

OSGI入门实例讲解(一)

开放服务网关倡议(OSGi)定义了开发和部署模块应用程序和库的体系结构.作为介绍OSGi的第一篇文章,本文旨在让你了解OSGi开发的一些概念,并向你展示了如何使用Eclipse的OSGi容器(Equinox)实现建立一个简单的Hello World应用.此外还简要介绍了使用OSGi构建面向服务的应用程序以及OSGi的servicefactory和servicetracker类. OSGI(Open Services Gateway Initiative),也叫JAVA动态模块系统,定义了一套模块