一、SpringMVC简介

官方文档地址

1、什么是SpringMVC?

Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的 轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,SpringMVC框架的目的就是帮助我们简化开发。

2、SpringMVC的优点
(1)结构松散,几乎可以在 Spring MVC 中使用各类视图
(2)松耦合,各个模块分离
(3)和Spring的兼容性好, 无缝集成

二、SpringMVC执行原理

1、SpringMVC中的DisPatchServlet
Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器.。
Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。
2、SpringMVC的执行原理

图解:

图中的实线部分为SpringMVC为我们提供好的技术,不需要我们程序员进行多余的操作,虚线部分就是我们程序员要实现的。
流程分析:

我们假设请求的url为 : http://localhost:8080/SpringMVC/hello, 可以将上面的url拆分成三部分:
服务器域名:http://localhost:8080
控制器:hello
通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
1. DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
2. HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
3. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
4.HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
5.HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
6.Handler让具体的Controller执行。
7.Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
8.HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
9.DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
10.视图解析器将解析的逻辑视图名传给DispatcherServlet。
11.DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
12.最终视图呈现给用户。

下面我们编写一个HelloSpringMVC程序感受一下。

三、HelloSpringMVC程序

1、新建一个项目,导入SpringMVC的相关依赖
        <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>
2、在web.xml 中配置DisPatchServlet
<?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_4_0.xsd"version="4.0"><!--配置disPatchServlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--disPatchServlet要绑定Spring的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!--设置启动级别:1 服务器一启动,它就会一起启动--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!--SpringMVC中/ :只匹配所有的请求,不会匹配jsp页面/*: 会匹配所有的请求,包括jsp页面--><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
3、编写SpringMVC配置文件 springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
4、在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"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置处理器映射器--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!--配置处理器适配器--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><!--配置视图解析器--><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/></bean>
5、编写HelloController,这个HelloController要么实现Controller接口,要么添加Controller注解
package com.zyh.controller;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HelloController implements Controller {public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView();//业务代码String result = "HelloSpringMVC";mv.addObject("msg",result);//视图跳转mv.setViewName("test");return mv;}
}
6、编写跳转的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
${msg}
</body>
</html>
7、将Controller交给SpringIOC容器
    <!--BeanNameUrlHandlerMapping:这个处理器需要自己设置请求的URL,把这个请求交个HelloController去处理--><bean id="/hello" class="com.zyh.controller.HelloController"/>
</beans>

测试: 启动Tomcat

SpringMVC学习(一)SpringMVC入门 、HelloSpringMVC程序、SpringMVC执行原理相关推荐

  1. SpringMVC学习(二)——快速搭建SpringMVC开发环境(注解方式)

    文章目录 说明 1.工程搭建 2.注解配置 2.1.context:annotation-config说明 2.2.context:component-scan配置说明 2.3.mvc:annotat ...

  2. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  3. 简述python执行原理_Python程序的执行原理(1)(2)

    Python程序的执行原理(1)(2) 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在 ...

  4. python执行原理是什么意思_简述Python程序的执行原理。

    [简答题]什么是遗传密码的摆动性? [简答题]请将下列程序补充完整,并将源代码和运行结果截图提交. 要求:从键盘输入任意实数,请输出其绝对值. 注意:完善源代码文档信息,并为程序添加必要的注释. /* ...

  5. python执行原理是什么意思_Python程序的执行原理

    摘要:Python程序的执行原理是什么,下面这篇文章为你详细介绍. 1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执 ...

  6. python怎么运行_程序员大牛讲解,Python程序的执行原理

    人工智能的火热让Python成为近两年来发展最好的开发语言,Python已经被越来越多的人所熟知,Python开发工程师水涨船高的薪资也吸引着更多的人进入这个行业.一名合格的Python工程师怎么能不 ...

  7. JAVAWEB入门之Sevlet的执行原理

    上一节我们学习了快速入门, 但是里面的问题是ServletDemo1里面既没有创建对象,又没有写方法,竟然就被执行了,为什么呢? 我们来分析一下Sevlet的执行原理 1.当服务器接收到客户端浏览器的 ...

  8. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明

    在初学Java的时候,我们安装完Java的开发环境后,就可以通过记事本等编辑工具编写程序了.推荐在Windows操作系统中使用EditPlus工具进行编写.由于我使用的是Mac OS,所以,我使用Su ...

  9. python程序的原理_Python程序的执行原理(转)

    1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在Python虚拟机程序里对应的是PyCo ...

  10. 【SpringMVC学习01】宏观上把握SpringMVC框架

    本文已收录到我的github:Java开发宝典 springmvc是一个基于mvc的web框架,是spring框架的一个模块,所以springmvc和spring无需通过中间整合层进行整合.我们先来看 ...

最新文章

  1. BAT集体告别中台上半场!接下来,中台怎么玩?
  2. python 文件大小,获取时间
  3. 有必要学python吗-让孩子学Python编程有必要吗
  4. SAP One Order redesign里的WebUI advanced search重构
  5. Ubuntu下安装Pycharm及相关设置
  6. 用户行为变迁 行业垂直深耕——疫情下的2020年移动互联网报告
  7. html5 replace,js replace 与replaceall实例用法详解
  8. 【观点】失败应聘的五大原因
  9. Windows 7版本IE10浏览器11月中旬推出
  10. Leco题目:两数之和
  11. 【蓝桥杯单片机(14)】PWM波实现呼吸灯
  12. 分享一款自用的强悍高清录制软件Bandicam4.3.4.1503中文便携特别版
  13. NX二次开发-UFUN创建工程图注释UF_DRF_create_note
  14. php 匹配截取,PHP字符串处理函数2(字符串输出,截取,查找,拆分)
  15. ubuntu18.04分辨率最高只有1024*768
  16. 通过逗号隔开,实现字符串和list集合互转以及 list集合去重
  17. d3.js 旋转图形_有意思,C4D三维模型地形图形切片插件 Toporizer 1.0 for Cinema 4D R19S22带中文汉化...
  18. 极致体验,探寻抖音背后的音视频技术
  19. iptables 端口转发
  20. Nginx代理服务器转发解决跨服务器访问

热门文章

  1. bat循环打印输出1到10
  2. OpenCV由汉字生成图片(透明)----可以对抗论文查重!!!
  3. 网站跨域访问解决方法
  4. 实习笔记 6: 测试技巧,json序列化对象
  5. PHP连接 SQLSERVER 注意事项(经典中的经典)
  6. 将Excel的数据导入DataGridView中[原创]
  7. Treeview的文件目录配置
  8. 岗位目标_达州苏宁召开2019年度工作规划 与岗位目标责任书签订仪式会议
  9. python热图怎么截取对角线的一半_python-控制seaborn热图中的单个线宽
  10. linux 目录权限,Linux目录权限整理总结