深入理解Spring MVC概要与环境配置

一、MVC概要

MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑、数据、显示分离的方法组织代码,MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。

在web早期的开发中,通常采用的都是Model1。Model1中,如图所示主要分为两层,视图层和模型层。Model2把一个项目分成三部分,包括视图、控制、模型。这样不仅提高的代码的复用率与项目的扩展性,且大大降低了项目的维护成本。Model 1模式的实现比较简单,适用于快速开发小规模项目,Model1中JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。Model2消除了Model1的缺点。

Model1

Model2

常见的服务器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常见前端MVC框架:angularjs、reactjs、backbone;由MVC演化出了另外一些模式如:MVP、MVVM。

二、Spring MVC介绍

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。Spring MVC的特点:

1、轻量

2、高效

3、与Spring兼容性好

4、功能强大

RESTful、数据验证、格式化、绑定机制、本地化、主题等

5、简洁灵活

Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。官网上说Spring的web模块提供了大量独特的功能,包括:

清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等等。 每一个角色都可以由一个专门的对象来实现。

强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用。

可适配、非侵入:可以根据不同的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承。

可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用级的验证错误, 这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象, 需要手动解析它并转换到业务对象。

可定制的handler mapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。

灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各种视图技术的集成。

可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。

简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能。它提供在标记方面的最大灵活性。

JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易。

Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。 准确的说,这并非Spring MVC框架本身特性,而应归属于Sping MVC使用的WebApplicationContext容器。

三、第一个Spring MVC 项目:Hello World

3.1、通过Maven新建一个Web项目

在Eclipse中新建Maven项目,选择“Create a simple project”,创建一个简单项目,不选择模板。

修改层面信息,更加详细的内容请参考前面写过的文章:

将webcontent中的所有内容复制到webapp目录下,并删除webContent目录,删除后的结果如下:

修改项目的部署信息,删除测试文件夹,添加webapp为项目根目录:

如果不打算在pom.xml中添加对Server runtime的依赖,则这里必须手动添加依赖,如下图所示:

另外如果pom.xml报错,修改任意位置保存。

3.2、添加依赖的jar包

1、修改pom.xml文件、添加jar包的依赖,主要有:Spring框架核心库、Spring MVC、JSTL等,具体信息如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zhangguo</groupId>
  <artifactId>SpringMVC01</artifactId>
  <version>0.0.1</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.3.0.RELEASE</spring.version>
  </properties>

  <dependencies>
    <!--Spring框架核心库 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- Spring MVC -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- JSTL -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
</dependencies>
</project>

当依赖成功时,会加载的jar包如下:

3.3、修改web.xml注册中心控制器DispatcherServlet

Spring MVC框架像许多其他MVC框架一样, 请求驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。如下图所示当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

修改web.xml文件注册该Servlet,修改后的web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  id="WebApp_ID" version="3.0">

  <servlet>
    <!--名称 -->
    <servlet-name>springmvc</servlet-name>
    <!-- Servlet类 -->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 启动顺序,数字越小,启动越早 -->
    <load-on-startup>1</load-on-startup>
    <init-param>
      <!--SpringMVC配置参数文件的位置 -->
      <param-name>contextConfigLocation</param-name>
      <!--默认名称为ServletName-servlet.xml -->
      <param-value>classpath*:springmvc-servlet.xml</param-value>
    </init-param>
  </servlet>

  <!--所有请求都会被springmvc拦截 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

3.4、添加Spring MVC配置文件

在src/main/java源代码目录下添加springmvc-servlet.xml配置文件,配置的形式与Spring容器配置基本类似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.3.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

  <!-- 自动扫描包,实现支持注解的IOC -->
  <context:component-scan base-package="com.zhangguo.springmvc01" />

  <!-- Spring MVC不处理静态资源 -->
  <mvc:default-servlet-handler />

  <!-- 支持mvc注解驱动 -->
  <mvc:annotation-driven />

  <!-- 视图解析器 -->
  <bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    id="internalResourceViewResolver">
    <!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/view/" />
    <!-- 后缀 -->
    <property name="suffix" value=".jsp" />
  </bean>
</beans>

在视图解析中我们把所有的视图都存放在/WEB-INF/目录下,这样是为了视图安全,因为这个目录客户端不能直接访问。

3.5、创建HelloWorld控制器

在src/main/java源代码目录下创建包com.zhangguo.springmvc01.controller,在包下创建一个普通的类:HelloWorld,具体代码如下:

package com.zhangguo.springmvc01.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/Hello")
public class HelloWorld {
  @RequestMapping("/Sayhi")
  public String SayHi(Model model) {
    model.addAttribute("message", "Hello Spring MVC!");
    return "sayhi";
  }
}

注解为@Controller是为了让Spring IOC容器初始化时自动扫描到;@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/Hello/Sayhi;方法中声明Model类型的参数是为了把Action中的数据带到视图中;方法返回的结果是视图的名称sayhi。

3.6、创建视图

在WEB-INF/view目录中创建视图,视图将从Action中带回的信息展示,具体内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello Spring MVC!</title>
</head>
<body>
  <h2>${message}</h2>
</body>
</html>

3.7、测试运行

启动Tomcat运行项目,请注意查看启动信息,如果有异常应该先解决异常信息,运行成功后的结果如下所示:

3.8、示例下载

项目地址:SpringMVCdemo_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springMVC配置环境实现文件上传和下载

    最近的项目中用到了文件的上传和下载功能,我觉着这个功能比较重要,因此特意把它提取出来自己进行了尝试. 下面就是springMVC配置环境实现文件上传和下载的具体步骤,供大家参考,具体内容如下 一. 基础配置: maven导包及配置pom.xml,导包时除开springmvc的基础依赖外,需要导入文件上传下载时用到的commons-io.jsr和commons-fileupload.jar: <project xmlns="http://maven.apache.org/POM/4.0.0&

  • 深入理解Spring MVC概要与环境配置

    一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务逻辑间的双向偶合.MVC不是一种设计模式,MVC是一种架构模式.当然不同的MVC存在差异. 在web早期的开发中,通常采用的都是Model1.Model1中,如图所示主要分为两层,视图层和模型层.Model2把一个项目分成三部分,包括视图.控制.模型.这样不仅提高的代码的复用率与项目的扩展性,且大大

  • 让你五分钟彻底理解Spring MVC

    目录 概述 MVC 架构模式 传统 MVC 架构模式 Java Web MVC 架构模式 Spring MVC 架构模式 Hello,Spring MVC Spring MVC 依赖引入 DispatcherServlet 声明 Spring 上下文配置 Spring 上下文配置文件内容 HandlerMapping 配置 处理器配置 ViewResolver 配置 DispatcherServlet 组件默认配置 基于注解的 Spring WebMVC DispatcherServlet 请求

  • Spring MVC的web.xml配置详解

    spring是目前最流行的框架.创建java web项目时,我们首先会遇到的配置文件就是web.xml,这是javaweb为我们封装的逻辑,不在今天的研究中.下面我们将简单讲讲web.xml中的配置. 一.一个空的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns:xsi="http://www.w3.org/2001/

  • Spring MVC完全注解方式配置web项目

    在servlet 3.0 开始web项目可以完全不需要web.xml配置文件了,所以本文的配置只在支持servlet 3.0及以上的web容器中有效 使用的是spring mvc (4.3.2.RELEASE) + thymeleaf(3.0.2.RELEASE), 持久层使用的 spring的 JdbcTemplate, PS:推荐一个很好用的对JdbcTemplate封装的框架:https://github.com/selfly/dexcoder-assistant  . 下面开始具体的配置

  • 深入理解Spring MVC的数据转换

    本文主要给大家介绍了关于Spring MVC数据转换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 数据绑定 SpringMVC负责将request中的信息以一定的方式转换并绑定到处理方法的参数上.整个过程的处理核心是由DataBinder完成.转换流程如下: 1.DataBinder从ServletRequest中获取参数信息: 2.DataBinder获取处理方法的参数: 3.DataBinder调用ConversionService组件数据类型转换和数据格式化

  • Spring MVC框架配置方法详解

    本文实例为大家分享了Spring MVC框架配置方法,供大家参考,具体内容如下 1.概述 Spring MVC 作用:用来实现前端浏览器与后面程序的交互 Spring MVC 是基于Spring 的MVC框架,所谓MVC(model,controller,view) ,整个Spring MVC 作用就是,基于Spring 将model(数据)在controller(后台程序) ,view(前端浏览器)之间交互 至于Spring MVC优点缺点,了解不深 不作评价, 2.引用的jar包 既然是基于

  • Spring Web MVC框架学习之配置Spring Web MVC

    这一篇文章讲的是Spring Web MVC各部分的配置方法,包括Java代码配置和XML文件配置以及MVC命名空间的使用方法. 启用MVC Java配置和XML命名空间 默认配置 要启用MVC Java配置(@Controller等各种注解)和XML命名空间,如果使用的是Java配置,在配置类上再添加@EnableWebMvc注解即可. @Configuration @EnableWebMvc public class WebAppConfig { } 如果使用XML配置文件的话,添加下面一行

  • spring Mvc配置xml使ResponseBody返回Json的方法示例

    前言 学习了spring mvc后,发现spring mvc返回json数据比struts2要方便,使用@ResponseBody就可以了 @ResponseBody 在返回的数据不是html标签的页面,而是其他某种格式的数据时(如json.xml等)使用: 不在springMvc中配置json的处理的话,我们通常会在Controller层中获取到数据之后进行类型转化,将数据转成json字符串,比如调用fastjson进行转化,如下 @RequestMapping("/getCategoryTr

  • 基于Spring + Spring MVC + Mybatis 高性能web构建实例详解

    一直想写这篇文章,前段时间痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详细的配置,详细的注释,看起来应该很容易懂. 用最合适的技术去实现,并不断追求最佳实践.这就是架构之道. 希望这篇文章能给你们带来一些帮助,同时希望你们可以为这个项目贡献你的想法. 源码地址:https://github.com/Eliteams/quick4j 点击打开 源码地址:https://gi

  • Spring MVC学习之DispatcherServlet请求处理详析

    前言 要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServlet 就完全可以说弄清楚了spring mvc. DispatcherServlet作为Spring用于处理web请求注册的唯一一个Servlet,所有的请求都是经由DispatcherServlet进行分发处理的.本文主要讲解DispatcherServlet是如何对请求进行分发,处理,并且

随机推荐