文档章节

spring复习

pantyyy
 pantyyy
发布于 2017/08/12 16:57
字数 1657
阅读 15
收藏 0

spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射,视图渲染,本地化,时区与主题渲染等,甚至还能支持文件上传。

原理.png

(1)Http请求:客户端请求提交到DispatcherServlet。

(2)寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。

(3)调用处理器:DispatcherServlet将请求提交到Controller。

(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView.

(6)(7)处理视图映射并返回模型:DispatcherServlet查询一个或多个ViewResolver视图解析器,找到ModelAndView指定的视图。

(8)Http响应:视图负责将结果显示到客户端。

 

 

主要注解:

    @Controller:

        1.用于标注控制层组件

        2.@Controller用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象

        3.分发处理器将会扫描了使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解

        4.可以把Request请求header部分的值绑定到方法的参数上

@RestController:

    相当于@Controller和@responseBody的组合效果

@Component:

    泛指组件,当组件不好归类的时候,可以使用这个注解进行标注

@Repository:

    用于注解dao层,在daoImpl类上面注解

@Service:

    用于标注业务层组件

@ResponseBody:

    异步请求

    该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConvert转换为指定格式后,写入到Response对象的body数据区

    返回的数据不是html标签的页面,而是其他某种格式的数据时(如json,xml等)使用

@RequestMapping:

    一个用来处理请求地址映射的注解,可以用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

@Autowired:

    它可以对类成员变量,方法以及构造函数进行标注,完成自动装配的工作,通过@Autowired的使用来消除set,get方法

@PathVariable:

    用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

 

spring mvc注解.png

在讲ContextLoaderListener之前,首先来了解一下web.xml的作用。

    1.一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。web.xl文件是用来初始化配置信息:比如Welcome页面,Servlet,Servlet-mapping,filter,listener,启动加载级别等。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的Application。

    2.当要启动某个web项目时,服务器软件或容器如(tomcat)会第一步加载项目中的web.xml文件,通过其中的各种配置来启动项目,只有其中配置的各项均无误时,项目才能正确启动。web.xml有多项标签,在其加载的过程中顺序依次为:context-param>>listener>>filter>>servlet。(同类多个节点以出现顺序依次加载)

web.xml加载过程:

    1.启动web项目的时候,容器首先会去它的配置文件web.xml读取两个节点:<listener></listener>和<context-param></context-param>。

    2.紧接着,容器创建一个ServletContext(application),这个web项目所有部分都将共享这个上下文。

    3.容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存入ServletContext。

    4.容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有contextInitialized(ServletContexEvent args)初始化方法,启动web应用是,系统调用Listener的该方法,在这个方法中获得:

        ServletContext application=ServletContextEvent.getServletContext();

        context-param的值=application.getInitParameter("context-param的值");

得到context-param的值之后,你就可以做一些操作了

举例:

    你可能在想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式(驱动,url,user,password),在监听类中初始化数据库的连接,这个监听是自己写的一个类,除了初始化方法,它还有销毁方法,用于关闭应用的释放资源,比如:数据库连接的关闭,此时调用contextDstroyed(ServletContextEvent args),关闭web应用时,系统调用Listener的改方法。

web.xml加载过程.png

而springmvc启动过程大致分为两个过程:

    1.ContextLoaderListener初始化,实例化IoC容器,并将此容器实例注册到ServletContext中。

    2.DispatcherServlet初始化。

web.xml配置:

    contextConfigLocation:指定spring IOC容器需要读取的XML文件路径,默认会去/WEB-INF/下加载applicationContext.xml

  ContextLoaderListener:spring监听器,spring mvc在web容器中的启动类,读取applicationContext.xml,负责spring IOC容器在web上下文中的初始化

    DispatcherServlet:前端处理器,接收的HTTP请求和转发请求的类

    CharacterEncodingFilter:字符集过滤器

    IntrospectorCleanupListener:防止spring内存溢出监听器

web.xml配置.png


     
  • ContextLoaderListener在web.xml中的配置
<!-- 配置contextConfigLocation初始化参数 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<!-- 配置ContextLoaderListerner -->
<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

    springmvc框架,与其他很多web的mvc框架一样:请求驱动;所有设计都围绕一个中央Servlet;来展开,他负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet,能做的比这更多。

    下图展示了Spring Web MVC的DispatcherServlet处理请求的工作流。熟悉设计模式的朋友会发现,DispatcherServlet应用其实就是一个“前端控制器”的设计模式(其他很多优秀的web框架也都使用了这个设计模式)。

spring mvc处理请求的流程.jpg

  • 在web.xml中的配置
<!-- servlet定义 -->
<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>

    load-on-startup:表示启动容器时初始化该Servlet;

    url-pattern:表示哪些请求交给Spring Web MVC处理,"/"是用来定义默认servlet映射的。也可以如"*.html"表示拦截所有以html为扩展名的请求。

    在springMVC中,每个DispatcherServlet都持有一个自己的上下文对象WebApplicationContext,它又继承了根(root)WebApplicationContext对象中已经定义的所有bean。这些继承的bean可以在具体的Servlet实例中被重载,在每个Servlet实例中你也可以定义其scope下的新bean。

    WebApplicationContext继承自ApplicationContext,它提供了一些web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题解析,并且知道它关联到的是哪个servlet(它持有一个改ServletContext的引用)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

上一篇: Spring总结
pantyyy
粉丝 4
博文 21
码字总数 13293
作品 0
私信 提问
阿里Java岗一面被问到对Spring的理解,懵了?这些你又了解多少

还在机械地打代码?我们很多开发者在开发 Spring 的程序的时候,很多的情况下,都是被动的接受了前辈们为我们做好的 Spring 特性案例。这样以来,确实在很大的程度上减少了我们开发的成本,但...

java知识分子
06/12
43
0
Spring Cloud Alibaba系列教程-02-将应用注册到Nacos上

在 跟我学Spring Cloud(Finchley版)-02-构建分布式应用 一文中,已编写好两个微服务;在 跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析 一文中详细剖析了服务发现的原...

周立_itmuch
03/15
0
0
Maven搭建SpringMVC+Hibernate项目详解 【转】

今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这篇主要搭建SpringMVC4.1.4和Hiber...

梵蒂冈考虑过
2016/10/19
56
1
SpringBoot系列之AOP实现的两种方式

AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ)。 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行时的...

文文1
03/11
480
0
2017下半年计划

想提高的技能有: 数据库(包括但不限于mysql、oracle、redis、mongodb等等)数据库优化有丰富经验; 熟悉Linux和主流应用服务器(Tomcat, Redis等)的配置和使用; 熟悉Spring/SpringMVC/MyBa...

攻城狮吼
2017/06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部