spring复习

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的引用)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3591016/blog/1507139

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值