Spring MVC学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Martind/article/details/81299877

Spring学习笔记 No.1

Front Controller(MVC)
首先,用户请求通过http协议到达前端控制器(front controller)
前端控制器根据请求确定应该被谁处理,然后把请求交给控制器
控制器了解业务逻辑的细节,调用业务逻辑,生成业务数据并将业务数据返回给前端控制器
前端控制器将业务数据分发给业务视图,由业务视图呈现用户页面,再将呈现好的用户页面返回给前端控制器并最终返回给浏览器

步骤:
1、发起请求到前端控制器(DispatcherServlet)
2、前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找
3、处理器映射器HandlerMapping向前端控制器返回Handler
4、前端控制器调用处理器适配器去执行Handler
5、处理器适配器去执行Handler
6、Handler执行完给适配器返回ModelAndView
7、处理器适配器向前端控制器返回ModelAndView
8、前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
9、视图解析器向前端控制器返回View
10、前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView中)填充到Request域
11、前端控制器向用户响应

组件:
1、前端控制器:负责分发调度,接收请求,响应结果
2、处理器映射器HandlerMapping:根据请求的url查找Handler
3、处理器适配器HandlerAdapter:按照特定规则执行Handler
4、视图解析器View resolver:进行视图解析,根据逻辑视图解析成真正的视图(view)
5、视图view:View是一个借口,实现类支持不同的view类

控制器:负责业务数据抽取
业务视图负责页面呈现

MVC的核心思想是业务数据抽取同业务数据呈现相分离

MVC:是一种架构模式,程序分层,相互独立,又协同工作
View:视图层为用户提供UI,重点关注数据的呈现
Model:模型层,业务数据的信息表示,关注支撑业务的信息构成,通常是多个业务实体的组合
Controller:控制层,调用业务逻辑产生合适的数据,传递数据给视图层用于呈现

DispatcherServlet:是前端控制器的设计模式实现,提供Spring MVC的集中访问点,负责职责的分派
用户请求通过DispatcherServlet分发到达Controller,生成Model并传递给View呈现
HandlerAdapter:根据Handler来找到支持它的HandlerAdapter,通过HandlerAdapter之行这个Handler得到ModelAndView对象
HandlerInterceptor:是一个接口
HandlerMapping:帮助DispatcherServlet找到合适的Controller,HnadlerMapping执行结束后打包controller和HandlerInterceptor,形成一个执行链条
HandlerExecutionChain:执行链条,preHandle -> Controller method -> postHandle -> afterCompletion 实现方法:(java反射实现)

MOdelAndView:Model的一种表现形式
ViewResolver:视图解析器,帮助DispatcherServlet找到正确的视图来表达

DispatcherServlet拦截request,将分发任务代理给HandlerMapping找到正确的Controller、HandlerInterceptor,调用Handler/HandlerAdapter,生成ModelAndView,并交给ViewResolver解析,传递给View呈现

Servlet工作原理和生命周期

工作原理

当用户从浏览器向服务器发送一个请求,通常包含如下信息:http://hostname:port/contextpath/servletpath,hostname和port是用来与服务器建立TCP连接,而后面的URL才是用来选择服务器中的那个子容器服务用户的请求。

服务器是如何根据URL来达到找到正确的Servlet容器中的?
Tomcat是通过org.apache.tomcat.util.http.mapper,这个类保存了Tomcat的Container中的所有子容器的信息,当org.apache.catalina.connector.Request类在进入Container容器之前,mapper将会根据这次请求的hostname和contextpath将host和context容器设置到Request的mappingData属性中。所以当Request进入Container容器之前,他要访问那个子容器就已经确定了。

生命周期

  • Servlet通过调用init()方法初始化,该方法被设计成只调用一次
  • Servlet调用Service()方法处理客户端请求
  • Servlet通过destroy()方法终止,tomcat关闭执行

web.xml标签含义

web.xml作用:是web项目的配置文件,java很多东西在服务器启动的时候要加载到内存中,web.xml可以配置这些要加载的文件。

web容器的加载顺序:

1、启动web项目,web容器会读取web.xml,读取和两个节点。

2、容器建立一个ServletContext(servlet上下文),这个web项目的所有部分将共享这个上下文

3、容器将转换为键值对,并交给servletContext

4、容器创建中的类实例,创建监听

schema:web.xml的模式文件是由Sun公司定义的,每个web.xml的根元素中,都必须标明这个web.xml使用的是哪个模式文件。其它的元素都放在之中。

:web应用名称,用于标记这个特定个web应用的名称。

:web应用描述。

:上下文参数,声明应用范围内的初始化参数。用于向Servlet+Context提供键值对,及上下文信息。后续的listener,filter在初始化时会用到这些上下文信息。在Servlet里面可以通过getServletContext().getIntParameter(“context/param”)得到。

:过滤器,可以认为是servlet的一种加强版,主要用于对用户请求request进行预处理,也可以对response进行后处理,是个典型的处理链。使用filter的完整流程是,filter对用户请求进行预处理,接着将请求HTTPServletRequest交给Servlet处理并生产响应。最后filter再对服务器响应HttpServletResponse进行后处理。(filter的生命周期和servlet的生命周期是一样的,它们都提供了init(FilterConfig arg0)和destroy()方法来控制。当web容器启动的时候,就会自动调用init(FilterConfig arg0)来对filter进行初始化)filter也可以通过进行初始化参数的配置,并通过filterConfig传送给filter。

:监听器

:运行在web服务器或应用服务器上的程序,作为来自web服务器或者其他htttp客户端的请求和http服务器上的数据库或应用程序之间的中间层。

:回话超时配置

:欢迎文件页

:设置jsp

:错误页面

HTTP协议

HTTP请求:
* 方法-URI-协议/版本
* 请求头部信息
* 请求正文

HTTP响应

  • 协议-状态码-描述
  • 响应头部信息
  • 响应正文

依赖注入

控制反转

Maven基本概念

POM:是一个xml文件(pom.xml)
Dependency:在pom.xml配置依赖管理
Coordinates:maven标识依赖包括groupId,artifactId,version,packaging

猜你喜欢

转载自blog.csdn.net/Martind/article/details/81299877