Spring MVC教程

Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速。

Spring框架最初由Rod Johnson撰写,并于2003年6月根据Apache 2.0许可证首次发布。

Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。

  • 模型(Model)封装了应用程序数据,通常它们将由POJO类组成。

  • 视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出。

  • 控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。


DispatcherServlet组件类

Spring Web模型 - 视图 - 控制器(MVC)框架是围绕DispatcherServlet设计的,它处理所有的HTTP请求和响应。 Spring Web MVC DispatcherServlet的请求处理工作流如下图所示:

以下是对应于到DispatcherServlet的传入HTTP请求的事件顺序:

  • 在接收到HTTP请求后,DispatcherServlet会查询HandlerMapping以调用相应的Controller

  • Controller接受请求并根据使用的GETPOST方法调用相应的服务方法。 服务方法将基于定义的业务逻辑设置模型数据,并将视图名称返回给DispatcherServlet

  • DispatcherServlet将从ViewResolver获取请求的定义视图。

  • 当视图完成,DispatcherServlet将模型数据传递到最终的视图,并在浏览器上呈现。

所有上述组件,即: HandlerMappingControllerViewResolverWebApplicationContext的一部分,它是普通ApplicationContext的扩展,带有Web应用程序所需的一些额外功能。


必需的配置

需要通过使用web.xml文件中的URL映射来映射希望DispatcherServlet处理的请求。 下面是一个示例来显示HelloWeb DispatcherServlet示例的声明和映射:

<web-app id="WebApp_ID" version="2.4"
    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">

    <display-name>Spring MVC Application</display-name>

   <servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>*.jsp</url-pattern>
   </servlet-mapping>

</web-app>


web.xml文件将保存Web应用程序的WebContent/WEB-INF目录。在HelloWeb DispatcherServlet初始化时,框架将尝试从位于应用程序的WebContent/WEB-INF目录中的名为[servlet-name]-servlet.xml的文件加载应用程序上下文。在这个示例中,使用的文件将是HelloWeb-servlet.xml

接下来,<servlet-mapping>标记指示哪些URL将由DispatcherServlet处理。 这里所有以.jsp结尾的HTTP请求都将由HelloWeb DispatcherServlet处理。

如果不想使用默认文件名为[servlet-name]-servlet.xml和默认位置为WebContent/WEB-INF,可以通过在web.xml文件中添加servlet侦听器ContextLoaderListener来自定义此文件名和位置 如下:

<web-app...>

<!-------- DispatcherServlet definition goes here----->
....
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
</context-param>

<listener>
   <listener-class>
      org.springframework.web.context.ContextLoaderListener
   </listener-class>
</listener>
</web-app>


现在来看看HelloWeb-servlet.xml文件的必需配置,放在Web应用程序的WebContent/WEB-INF目录中:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   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-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package="com.yiibai" />

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>

</beans>


以下是有关HelloWeb-servlet.xml文件的重点说明:

  • [servlet-name]-servlet.xml文件将用于创建定义的bean,它会覆盖在全局范围中使用相同名称定义的任何bean的定义。

  • <context:component-scan ...>标签将用于激活Spring MVC注释扫描功能,允许使用@Controller@RequestMapping等注释。

  • InternalResourceViewResolver将定义用于解析视图名称的规则。根据上面定义的规则,hello的逻辑视图将委托给位于/WEB-INF/jsp/hello.jsp这个视图来实现。

下一节将演示如何创建实际组件。即:控制器,模型和视图。


定义控制器

DispatcherServlet将请求委派给控制器以执行特定于其的功能。 @Controller注释指示特定类充当控制器的角色。@RequestMapping注释用于将URL映射到整个类或特定处理程序方法。

@Controller
@RequestMapping("/hello")
public class HelloController{

   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}


@Controller注释将类定义为Spring MVC控制器。这里@RequestMapping的第一个用法表示此控制器上的所有处理方法都与/hello路径相关。 下一个注释@RequestMapping(method = RequestMethod.GET)用于声明printHello()方法作为控制器的默认服务方法来处理HTTP GET请求。可以定义另一个方法来处理同一URL的任何POST请求。

可以以另一种形式在上面的控制器中编写,在@RequestMapping中添加其他属性,如下所示:

@Controller
public class HelloController{

   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}


value属性指示处理程序方法映射到的URL,method属性定义处理HTTP GET请求的服务方法。关于以上定义的控制器,需要注意以下几点:

  • 在服务方法中定义所需的业务逻辑。可以根据需要在此方法内调用其他方法。

  • 基于定义的业务逻辑,将在此方法中创建一个模型。可以设置不同的模型属性,这些属性将被视图访问以呈现最终结果。此示例创建且有属性“message”的模型。

  • 定义的服务方法可以返回一个String,它包含要用于渲染模型的视图的名称。此示例将“hello”返回为逻辑视图名称。


创建JSP视图

Spring MVC支持许多类型的视图用于不同的表示技术。包括 - JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom 和 RSS 源,JasperReports等。但最常见的是使用JSPL编写的JSP模板,这里使用的是JSP模板,并在/WEB-INF/hello/hello.jsp中写一个简单的hello视图:

<html>
   <head>
   <title>Hello Spring MVC</title>
   </head>
   <body>
   <h2>${message}</h2>
   </body>
</html>


这里${message}是在Controller中设置的属性。可以在视图中显示多个属性。


Spring MVC教程

相关教程

更多

Spring MVC 入门实例教程

                    
                

Spring MVC视频教程-尚学堂视频教程

                    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。  Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。  Spring MVC的易用性、功能强大等优点已经被越来越多的企业所接受,也成为一个使用广泛的mvc框架。  因此,尚学堂对于spring mvc的使用做了详细讲授,希望对大家的工作和学习起到一定的作用。    
                

孔浩spring_mvc视频教程

                    springmvc部分_源码.rar 12_整合hibernate实现一个用户小例子04_实现用户登录.avi 11_整合hibernate实现一个用户小例子03_实现CRUD.avi 10_整合hibernate实现一个用户小例子02_sitemesh.avi 09_整合hibernate实现一个用户小例子01_环境搭建.avi 08_基于springmvc实现简单用户管理05_json.avi
                

Spring MVC文件上传

                    
                

Spring MVC入门

                    我们所讲的内容包含了springmvc的所有最常用的最实用的知识点,通过我们的学习,我们使用springmvc可以独立开发各种web项目,你会发现开发web项目是如此的简单...
                

深入解析Spring MVC与Web Flow

                    深入解析Spring MVC与Web Flow的内容摘要:英文版:Expert Spring MVC and Web Flow内容简介《深入解析Spring MVCgn Web Flow》是Spring MVC 和Web Flow 两个框架的权威指南,书中包
                

Spring MVC 3 深入总结

                    一、前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。 官方的下载网址是:http://www.springsource.org/download (本文使用是的Spring 3.0.5版本) Struts2也是比较优秀的
                

Spring MVC与表单提交的问题

                    1.model:  public class UserType implements Serializable {  private static final long serialVersionUID = 1L;  private int id;  private String typeName;  private String remark;  private Date addDate;  p
                

精通Spring

                    本书深入剖析了当前流行的轻量级开发框架Spring技术。本书总共分成3部分。第一部分,重点阐述Spring的架构。这部分内容循序渐进带领开发者进入Spring中。主要在于阐述Spring IoC和Spring AOP。第二部分,重点阐述Spring的使用。第三部分,重点阐述Spring高级专题。另外,Web应用的安全性往往也是企业应用中最为重要的需求之一,而用于Spring的Acegi安全框架很好地解决了这个问题,这也是第三部分重点研究的内容之一。
                

spring mvc 框架搭建及入门详解【公开课视频下载】

                    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC ...
                

请教关于spring mvc中使用json-lib-ext-spring返回json的问题

                    我做了一个这样的框架:  spring+hibernate+spring mvc  想让spring mvc返回json数据,使用了json-lib-ext-spring1.0.2。  刚弄完时是http://localhost/listPerson.do可以在页面上显示出json数据的,但是后来改了一些东西。然后再调用http://localhost/listPerson.do却不显示json数
                

spring mvc 页面传值到controller

                    一个页面上有很多输入框,我想把这些值通过json格式传到controller中,通过注解应该如何实现?后台如何能取得这些参数啊?谢谢!     问题补充:     liukai 写道      你弄反了    前台传值到后台用binding    后台传值到前台才用json或XML    这个binging如何实现?我知道struts2是get set,
                

Httpclient整合Spring教程

                    Httpclient和Spring的整合就是把直接new对象的方式改为spring配置即可  1、首先看spring配置文件 spring-context.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/s