Spring MVC 学习总结(一)——MVC概要与环境配置

目录

  • 一、MVC概要
  • 二、Spring MVC介绍
  • 三、第一个Spring MVC 项目:Hello World
    • 3.1、通过Maven新建一个Web项目
    • 3.2、添加依赖的jar包
    • 3.3、修改web.xml注册中心控制器DispatcherServlet
    • 3.4、添加Spring MVC配置文件
    • 3.5、创建HelloWorld控制器
    • 3.6、创建视图
    • 3.7、测试运行
    • 3.8、示例下载

一、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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://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 /><!-- 视图解析器 --><beanclass="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运行项目,请注意查看启动信息,如果有异常应该先解决异常信息,运行成功后的结果如下所示:

转载于:https://www.cnblogs.com/zhangdang/p/8315629.html

Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客相关推荐

  1. Spring MVC 学习总结(五)——校验与文件上传 转自 张果 博客;已经编程校验;正确无误;...

    Spring MVC 学习总结(五)--校验与文件上传 目录 一.Spring MVC验证器Validator 1.1.定义验证器 1.2.执行校验 1.3.在UI中添加错误标签 1.4.测试运行 二 ...

  2. 前端一班:HTML5当天学习总结-摘抄张果博客园

    一.初步了解HTML5,相关涉及技术以及行业前景 二.HTML5特性 HTML5 八个特性类别对应的8个Logo 语义化.离线&存储.设备访问.通信 多媒体.图形和特效.性能和集成.呈现(CS ...

  3. MVC学习一:MVC简单流程

    MVC学习一:MVC初次接触 1.MVC简单流程 1.1.服务器接收客户端请求后,解析URL(根据 路由表里配置的URL来分析 类名(控制器名)和方法名)根据请求的类名,创建对应的控制器类对象,并调用 ...

  4. AutoGLuon学习笔记(一):环境配置与API初识

    AutoGLuon学习笔记(一):环境配置与API初识 环境配置 CUDA安装 Autogluon安装 图片分类 数据集导入和处理 拟合模型 预测新图片 测试集准确率 保存模型 超参数优化 模型范围设 ...

  5. 【youcans 的图像处理学习课】1. 安装与环境配置

    专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 [youcans 的图像处理学习课]1. 安装与环境配置 1. OpenCV 计算机视觉库 ...

  6. MVC学习笔记1 MVC概述

    MVC概述 MVC三种角色 – Model:   用于存储数据的组件(与领域模型概念不同). – View:    根据Model数据进行内容展示的组件 – Controller:接受并处理用户指令( ...

  7. Spring框架学习(四):聊一聊xml配置和Java配置

    之前的例子在演示过程中直接使用了xml的配置方式,对于刚刚接触Spring的同学来说肯定也是蒙圈的.这篇我们就从配置开始聊起. 在开发过程中,程序员通常使用这两种方式进行Spring的配置: 基于XM ...

  8. GitHub一份深度学习资源,包括论文、数据集、课程、图书、博客、教程、框架

    整体来说,这份资源可以理解为是深度学习领域的hao123,一共将深度学习各方面的资源分成了7大类.具体是: 论文 论文资源版块,一共分成3个类别,分别是模型.核心和应用. 在每个类别之下,又进行了两次 ...

  9. 《学习OpenCV3》(中文版)环境配置摘记

    <学习OpenCV3>环境配置摘记 这篇博客是看完<学习OpenCV3>环境配置部分的摘记 只摘部分,完整版请自己翻阅<学习OpenCV3> 下载和安装OpenCV ...

最新文章

  1. android 退出程序提示是否退出对话框
  2. [经典算法] 河内塔
  3. Vue 的路由实现 Hash模式 和 History模式
  4. 融资 6 亿元后,端点科技将致力于类SaaS化软件服务
  5. Hadoop运行环境搭建
  6. nice video by securitytube.net
  7. 2021最新PHP短网址生成系统/短链接生成系统/URL缩短器系统源码
  8. java csvwriter 追加_CSV文件每行的末尾追加写数据
  9. 宝宝营养粥及如何提高宝宝睡眠
  10. JDBC基础操作汇总
  11. 程序员吐槽_程序员在地铁上写代码被路人吐槽:有什么好装的!网友评论炸锅了!...
  12. 40G/100G万兆交换机如何选择?
  13. 改变ubutun 默认配色
  14. 打了一台滴滴D1后,我开始思考今后还要买车吗?
  15. 智慧农业管理系统应用
  16. Supermap iDesktop处理导入CAD文件存在线型风格显示缺失问题
  17. 计网——17差错检测和纠正技术
  18. Verilog初级教程(4)Verilog中的标量与向量
  19. CleanMyMac4.11.2清理苹果电脑硬盘、删除垃圾文件软件
  20. A7139无线驱动调试

热门文章

  1. 云服务器1和1g装什么系统好,1核1g的云服务器装什么系统好
  2. 嵌入式linux-dropbear连接时重复输入密码
  3. 【求助】 C++如何在堆区创建 string 数组并且访问,o(╥﹏╥)o
  4. 《思考,快与慢》学习总结
  5. css sprites精灵技术:Html将所有图片放在一张图片上
  6. 把握人性的弱点——正确处理人际关系
  7. Neurosynth package安装及使用
  8. 探寻虹膜识别背后的身份密码 | 硬创公开课
  9. 阿里巴巴2015秋季校园招聘研发工程师在线笔试题
  10. 小微贷款按小时算利息,会是互联网巨头“放贷梦“的终局吗?