这节介绍SpringMVC,SpringMVC是一种基于JAVA的实现MVC设计模式的请求驱动类型的轻量级Web框架 。本章会介绍相关概念,流程,再从源码进行讲解 。
1. MVC MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离 。MVC框架模式是一种复合模式,MVC的三个核心部件分别是
- Model(模型):所有的用户数据、状态以及程序逻辑,独立于视图和控制器
- View(视图):呈现模型,类似于Web程序中的界面,视图会从模型中拿到需要展现的状态以及数据,对于相同的数据可以有多种不同的显示形式(视图)
- Controller(控制器):负责获取用户的输入信息,进行解析并反馈给模型,通常情况下一个视图具有一个控制器
文章插图
这个图描述了SpringMVC处理一个Http请求的基本流程,对应的流程为:
- 用户发送请求至前端控制器DispatcherServlet 。
- DispatcherServlet收到请求调用HandlerMApping处理器映射器 。
- 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet 。
- DispatcherServlet调用HandlerAdapter处理器适配器 。
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器) 。
- Controller执行完成返回ModelAndView 。
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet 。
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器 。
- ViewReslover解析后返回具体View.
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中) 。
- DispatcherServlet响应用户 。
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_4_0.xsd"version="4.0"><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/*</url-pattern></servlet-mapping></web-app>
在applicationContext.xml,指定包的扫描访问并添加标签<context:component-scan base-package="xxx" /><mvc:annotation-driven />
添加Controllerimport org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController {@RequestMapping("/hello")public String excute() {return "hello";}}
上面表示的意思为:- 开启ContextLoaderListener加载Spring根Context,对应的配置文件为applicationContext.xml
- 开启DispatcherServlet监听/*下的所有请求,加载WebContext,对应的配置文件为dispatcher-servlet.xml
- 指定扫描包路径,并开启mvc注解支持
- 添加对应的Controller,使用@RestController标记为Controller对象并使用@RequestMapping标记处理的请求路径
3.1. ContextLoaderListener的加载 从web.xml中可以知道,ContextLoaderListener依赖于Servlet的Listener技术 。Listener是在servlet2.3中加入的,主要用于对session、request、context等进行监控 。使用Listener需要实现相应的接口 。触发Listener事件的时候,Tomcat会自动调用相应的Listener的方法 。常用的监听接口包括:
- HttpSessionListener:监听session的创建和销毁 。
- ServletRequestListener:监听request的创建和销毁
- ServletContextListener:监听context的创建和销毁 。
ContextLoaderListener的定义如下:
public class ContextLoaderListener extends ContextLoader implements ServletContextListener {public ContextLoaderListener() {}public ContextLoaderListener(WebApplicationContext context) {super(context);}@Overridepublic void contextInitialized(ServletContextEvent event) {initWebApplicationContext(event.getServletContext());}@Overridepublic void contextDestroyed(ServletContextEvent event) {closeWebApplicationContext(event.getServletContext());ContextCleanupListener.cleanupAttributes(event.getServletContext());}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 在淘宝开店流程 淘宝网店怎么开的流程?
- 开淘宝网店的流程 淘宝店铺开设流程
- 淘宝店铺怎么开店流程 淘宝开店的具体操作流程
- 淘宝开店的具体操作流程 开淘宝店的流程和步骤
- 公司名称核准流程是怎么样的 企业名称预先核准申请书
- 茶行业如何利用全流程服务体系实现品牌突围
- ICP许可证申请流程
- 2020淘宝开店流程及费用 开淘宝店要钱吗2020
- 【婚礼流程表】婚礼当天的详细流程表
- 开淘宝店铺需要什么流程 开设淘宝店的主要流程