SprigMVC—理解MVC及快速入门

说明:

  传统MVC——>JSPModel2——>Front Controller + Application Controller + Page Controller + Context 三种模式是JavaWeb设计模式的逐渐适配和演进。本文分别讲述了这三种模式,作为了解即可。SpringMVC正是采用了第三种设计模式。

MVC

说明

  MVC是Xerox PARC在20世纪80年代为编程语言SmallTalk发明的一种软件设计模式。
  MVC是一种设计模式,它强制性地把应用程序的数据展示、数据处理和流程控制分开
  MVC将应用程序分成3个核心模块:模型、视图、控制器,他们相互联结又分别担当不同的任务,如图示所示。

图示

  

理解

  ☐ 模型:数据模型,提供要展示的数据,因此包含数据和行为,可以认为是JavaBean,一个模型可以为多个视图提供数据。
  ☐ 视图:负责模型的展示,一般就是我们见到的用户界面,客户想要看到的东西。
  ☐ 控制器:控制器负责应用的流程控制,所谓流程控制就是接受用户请求,委托给模型进场处理,后获取模型数据交由视图展示。

JSPModel2

说明

  在早期的Web应用中,JSP负责处理业务逻辑、控制网页流程并创建HTML页面。基本上JSP包揽的所有的模块,这无疑造成了不少的困扰:
  比如:
    ☐可维护性差
    ☐调试困难
    ☐ HTML与Java程序代码强耦合在一起
    ☐ 内嵌的流程控制逻辑,要理解应用程序的逻辑必须浏览所有的JSP页面。
  为了解决这些问题,SUN公司先后制定了两种设计模式,分别为Model1和Model2。虽然Model1在一定程序上实现了MVC中的视图和模型,但是他的运用并不理想,知道Model2的出现才改变了这种局面。
  Model2中用JSP技术实现了视图的功能、用Servlet技术实现了控制器的功能、用JavaBean技术实现了模型的功能

图解

  

Front Controller + Application Controller + Page Controller + Context

说明

  前端控制器+应用控制器+页面控制器(也有称其为动作)+上下文,也是一种WebMVC模型,只是责任更加明确,SpringMVC正是这种模式

运行流程图

  

职责

  Front Controller:前端控制器,负责为表现层提供统一访问点,从而避免Model2中出现的重复的控制逻辑(由前端控制器统一回调相应的功能方法,如前边的根据submitFlag=login转调login方法);并且可以为多个请求提供共用的逻辑(如准备上下文等等),将选择具体视图和具体的功能处理(如login里边封装请求参数到模型,并调用业务逻辑对象)分离。
 
  Application Controller:应用控制器,前端控制器分离选择具体视图和具体的功能处理之后,需要有人来管理,应用控制器就是用来选择具体视图技术(视图的管理)和具体的功能处理(页面控制器/命令对象/动作管理),一种策略设计模式的应用,可以很容易的切换视图/页面控制器,相互不产生影响。
 
  Page Controller(Command):页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示,可以是命令设计模式的实现。页面控制器也被称为处理器或动作。
 
  Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如Servlet API)的访问/设置模型数据,一般通过ThreadLocal模式实现。

HelloWorld

0.说明

  现在我们以前了解了MVC编程模型,接下来我们实际地编写一个SpringMVC入门实例,我们现在还不能解所有的技术细节,但是在接下来的博客一定会有相关解释。

1.加入Jar包

  

说明:

  点击链接(http://projects.spring.io/spring-framework/)进入官方网站,页面右侧选择4.0版本进行下载,下载完毕后添加以上Jar包到Java环境变量中。

2.配置Web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--配置DispatcherServlet--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--配置初始化参数:作用是配置SpringMVC配置文件的位置和名称--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:dispatcherServlet-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>  

说明:

      DispatcherServlet是前端控制器设计模式的实现,提供了Spring Web MVC的集中访问点。

    与其它web MVC框架一样,Spring的web MVC框架是一个请求驱动的web框架,其设计围绕一个中心的servlet进行, 它能将请求分发给控制器,并提供其它功能帮助web应用开发。然而,Spring的DispatcherServlet 所做的不仅仅是这些,它和Spring的IoC容器完全集成在一起,从而允许你使用Spring的其它功能

    请求处理流程:

    

3.加入SpringMVC的配置文件

<?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"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.xsd"><!--配置自动扫描的包--><context:component-scan base-package="handles"/><!--配置视图解析器:如何把handle方法返回值解析为实际的物理视图--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean>
</beans>

说明:

  视图解析器用来解析视图。如上视图解析器配置有前缀和后缀两个属性,这样一来,view路径将会缩短。

4.创建请求处理器类(编写控制器)

说明:

  这里我们使用了注解@Controller ,可以表明了该类作为一个控制器,而不需要你扩展任何控制器基类或者引用ServletAPI。当然,如果需要还是可以引用特定Servlet功能。注解@Controller的基本目标是担任所注解的类的原型的角色,指明它的职责。

  所注解的控制器Bean可以被显示定义。@Controller也允许自动侦测。要实现队所注解的控制器的自动侦测,必须要像配置中加入组件扫描的部分的语句。  

<?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:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="org.springframework.samples.petclinic.web"/><!-- ... -->
</beans>

5.编写JSP页面(编写视图)

/WEB-INF/views/success.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>Hello,World!
</body>
</html>

6.简单说明及测试

  控制器return返回了视图的名称,我们在SpringMVC 中设置了如何解析处理器返回值为视图。

  所以当我们访问/helloworld后我们会被处理器跳转到success.jsp页面。

转载于:https://www.cnblogs.com/MrSaver/p/6424291.html

SpringMVC:学习笔记(1)——理解MVC及快速入门相关推荐

  1. springMVC学习笔记(二)-----注解和非注解入门小程序

    阅读目录 一:基础环境准备 二:非注解的处理器和映射器 三:注解的处理器映射器和适配器 四:springmvc.xml中的内容以及项目工程目录 最近一直在做一个电商的项目,周末加班,忙的都没有时间更新 ...

  2. java培优学习笔记(一)多线程快速入门

    一.课程目标 线程与进程 为什么要使用多线程? 多线程应用场景 多线程创建方式 练习题 线程生命周期 面试总结 练习题 二.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线 ...

  3. 【Python学习笔记】超详细Python快速入门教程(下)

    文章目录 031 变量的作用域 032 递归函数 033 异常处理机制 034 class自定义类 035 object内置类 036 多态 037 特殊方法和属性 038 类的深拷贝和浅拷贝 039 ...

  4. TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅

    TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅读 ...

  5. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  6. SpringMVC学习笔记

    文章目录 SpringMVC学习笔记 Spring MVC 什么是 MVC 设计模式? Spring MVC 的核心组件 Spring MVC 的工作流程 如何使用? Spring MVC 注解 Sp ...

  7. SpringMVC学习笔记整理

    SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记: 导入jar包 一:springmvc工作流程. ①.     servlet容器初始化一个request请求 ②.     Di ...

  8. JavaEE 企业级分布式高级架构师(四)SpringMVC学习笔记(4)

    SpringMVC学习笔记 高级应用篇 ControllerAdvice @ControllerAdvice @ModelAttribute 作用于方法 作用于方法参数 @InitBinder @Ex ...

  9. SpringMVC学习笔记_01

    SpringMVC学习笔记_01 1.JAVAEE体系结构 JAVAEE体系结构图如下所示: 2.什么是springmvc? 什么是mvc? Model1 Model2 SpringMVC是什么? S ...

最新文章

  1. c++中使用Tesseract-OCR
  2. python_Django之模板模型
  3. C语言实验——拍皮球_JAVA
  4. Python爬虫遍历文档树
  5. 【拔刀吧少年】之awk文本和数据处理编程语言
  6. [20170412]bbed恢复修改记录(不等长).txt
  7. PAT甲级 -- 1148 Werewolf - Simple Version (20 分)
  8. ES6使用object的is()方法比较两个值
  9. STM32F407控制AD7606 采用HAL库的TIM和SPI
  10. Linux Vim基本操作(文件的打开和编辑)完全攻略(有图有真相)
  11. java 蓝桥杯算法训练 纪念品分组(题解)
  12. php面向对象开发技术 课本,PHP面向对象编程-高级技术书 - php
  13. java计算机毕业设计企业员工考勤系统的设计与实现源代码+数据库+系统+lw文档
  14. re.compile(r'xxx')中的r是什么意思
  15. 用IP地址签发SSL证书
  16. 単語ーー下げる(さげる)
  17. 解决:fatal: unable to access ‘https://github.com/xxxxxxxxxxxxxxx/‘: Failed to connect
  18. mnist数据集在FATE上应用
  19. 男人、女人都 值得推荐的经典电影
  20. POV-RAY基础教程 - 相机(6)

热门文章

  1. android开发 解析 b5,张绍文android开发高手课读书笔记4-启动优化篇
  2. java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...
  3. linux tcp 断网重连,LIS接口与串口服务器的KeepAlive的重连机制
  4. 如何用html构建ios应用,使用HTML5构建iOS原生APP(5)
  5. java读取文件到字符串_Java读取文件到字符串
  6. 如何使用PyTorch torch.max()
  7. Java try-catch示例
  8. python set_Python Set联合
  9. Android Volley教程
  10. primefaces教程_Primefaces FileUpload组件示例教程