SpringMVC-Web项目常见启动流程分析

1.web.xml中的常见配置

<servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:followMe.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<listener>
		<listener-class>com.heng.listener.MyContextLoaderListener</listener-class>
	</listener>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:followMe.xml</param-value>
	</context-param>

2.Web容器启动的部分流程,如tomcat

  • 加载解析web.xml中的配置信息
  • 初始化listener组件,调用contextInitialized(ServletContextEvent event)方法。
    调用链:StandardContext.listenerStart() > ContextLoaderListener.contextInitialized(ServletContextEvent)
    1.创建WebApplicationContext
    createWebApplicationContext(ServletContext sc)
    WebApplicationContext的Class类型:
    a.取web容器上下文中contextClass的值。sc.getInitParameter("contextClass")
    b.取ContextLoader.properties中默认值XmlWebApplicationContext
    2.配置刷新WebApplicationContet
    a.设置parent容器 parent=loadParentContext(sc) wac.setParent(parent)
    b.设置容器ID,使用sc.getInitParameter("contextId")的值或生成
    c.将web容器上下文设置到容器 wac.setServletContext(sc)
    d.设置配置文件读取路径 详解configLocation
    configLocationParam = sc.getInitParameter( "contextConfigLocation")
    wac.setConfigLocation(configLocationParam)
    e.将web容器上下文中的一些信息设置到environment中
    f.在WebApplicationContet刷新前对它进行一些定制 customizeContext(sc, wac)
    g.刷新WebApplicationContet wac.refresh();
    3.将WebApplicationContext设置到web容器上下文中
    sc.setAttribute("org.springframework.web.context.WebApplicationContext.ROOT" ,context)
  • 初始化Servlet组件,调用init()方法。
    调用链:StandardWrapper.initServlet(Servlet) > DispatcherServlet(GenericServlet).init(ServletConfig) >
    DispatcherServlet(HttpServletBean).init()
    1.读取ServletConfig中的配置参数设置到DispatcherServlet(FrameServlet)中
    2.配置刷新WebApplicationContet,大致过程如上
    特殊点:会注册一个静态指定的监听器,
    wac.addApplicationListener(new SourceFilteringListener(wac, new ContextRefreshListener()));,这样在后面容器刷新时registerListeners()方法就会把该监听器添加到事件传播器SimpleApplicationEventMulticaster中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值