SpringMVC框架web.xml解读

算法织网人
• 阅读 121

一:前言

web.xml文件一般位于WEB-INF目录下。

如果读过tomcat源码,就知道在tomcat在启动过程的初始化阶段,会读取web.xml的配置。

二:示例SpringMVC框架web.xml解读

spring父容器配置

SpringMVC框架web.xml解读

springMvc子容器配置

以上内容均为web.xml中配置,分为spring父容器和springMVC子容器的配置。

子容器的ApplicationContext会和父容器的ApplicationContext相关联。

三:解读3.1 ContextLoaderListener

ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法,使用ServletContextListener接口,开发者能够在为客户端请求提供服务之前向ServletContext中添加任意的对象。这个对象在ServletContext启动的时候被初始化,然后在ServletContext整个运行期间都是可见的。

每一个Web应用都要一个ServletContext与之相关联。ServletContext对象在应用启动时被创建,在应用关闭的时候被销毁。ServletContext在全局范围内有效,类似于应用中的一个全局变量。

在ServletContextListener中的核心逻辑便是初始化WebApplicationContext实例并存放至ServletContext中。

ServletContextListener 接口如下,tomcat等容器启动过程中会调用contextInitialized方法,加载ApplicationContext容器

public interface ServletContextListener extends EventListener {

public void contextInitialized(ServletContextEvent sce);

public void contextDestroyed(ServletContextEvent sce);

}

3.2 DispatcherServlet

(一)介绍

DispatcherServlet的继承关系如下图:

SpringMVC框架web.xml解读

在Spring中,ContextLoaderListener只是辅助功能,用于创建WebApplicationContext类型实例,而真正的逻辑实现其实是在DispatcherServlet中进行的,DispatcherServlet是实现servlet接口的实现类。

servlet是一个java编写的程序,此程序是基于HTTP协议的,在服务器端运行的(如Tomcat),是按照servlet规范编写的一个Java类。主要是处理客户端的请求并将其结果发送到客户端。servlet的生命周期是由servlet的容器来控制的,它可以分为3个阶段:初始化,运行和销毁。

(1)初始化阶段

  • servlet容器加载servlet类,把servlet类的.class文件中的数据读到内存中。
  • servlet容器创建一个ServletConfig对象。ServletConfig对象包含了servlet的初始化配置信息。
  • servlet容器创建一个servlet对象。
  • servlet容器调用servlet对象的init方法进行初始化。

(2)运行阶段。

当servlet容器接收到一个请求时,servlet容器会针对这个请求创建servletRequest和servletResponse对象,然后调用service方法。并把这两个参数传递给service方法。service方法通过servletRequest对象获得请求的信息。并处理该请求。再通过servletResponse对象生成这个请求的响应结果。然后销毁servletRequest和servletResponse对象。我们不管这个请求是post提交的还是get提交的,最终这个请求都会由service方法来处理。

(3)销毁阶段。

当Web应用被终止时,servlet容器会先调用servlet对象的destory方法,然后再销毁servlet对象,同时也会销毁与servlet对象相关联的servletConfig对象。我们可以在destory方法的实现张红,释放servlet所占用的资源,如关闭数据库连接,关闭文件输入输出流等。

servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http。在javax.servlet包中定义了所有的servlet类都必须实现或扩展的通用接口和类,在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类。

servlet被设计成请求驱动,servlet的请求可能包含多个数据项,当Web容器接收到某个servlet请求时,servlet把请求封装成一个HttpServletRequest对象,然后把对象传给servlet的对应的服务方法。

(二)DispatcherServlet的初始化

在servlet初始化阶段会调用其init方法,所以我们首先要查看在DispatcherServlet中是否重写了init方法。我们在其父类HttpServletBean中找到了该方法 init()

在初始化过程中会逐级调用相关方法:

init() -》

initServletBean() -》

initWebApplicationContext() -》

createWebApplicationContext(rootContext) -》

createWebApplicationContext(ApplicationContext parent) -》 configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac)

其中,configureAndRefreshWebApplicationContext方法中添加了一个ApplicationListener,它在onRefresh(ApplicationContext context) 的initStrategies(ApplicationContext context)方法中,对相关组件进行了初始化:

protected void initStrategies(ApplicationContext context) {

initMultipartResolver(context);

initLocaleResolver(context);

initThemeResolver(context);

initHandlerMappings(context);

initHandlerAdapters(context);

initHandlerExceptionResolvers(context);

initRequestToViewNameTranslator(context);

initViewResolvers(context);

initFlashMapManager(context);

}

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
tomcat源码分析
摘要:在阅读tomcat源码前,我们一般都会有如下几个疑问:web容器和servlet容器的区别是什么;在springMVC中的web.xml是什么时候加载到tomcat中的;tomcat是怎么加载我们的web服务的;tomcat是怎么实现的热部署;一个http请求1.前言1.1问题思考在阅读tomcat源码前,我们
Easter79 Easter79
3年前
tomcat不能运行或共存多个项目
我在Tomcat下部署了两个项目,但是一个可以运行,另一个不可以,第一感觉是内存问题,给tomcat多分配了内存.但是没有作用.原因是少了webAppRootKey这个参数,需要在各自的web.xml下添加<contextparam       <paramnamewebAppRootKey</paramname 
虾米大王 虾米大王
2年前
java代码032
code033.jsp获取web.xml中的配置<%在tomcat的web.xml配置文件中,增加如下配置:urljdbc:mysql://127.0.0.1:3306/test%
Easter79 Easter79
3年前
SpringMVC与SpringBoot配置文件的加载区别
一、SpringMVC:配置文件在classpath下。在web.xml中配置加载。以下项目为示例其中引用关系为1. applicationContextdao.xml引用了mybatis文件夹中的配置文件2. applicationContextshiro.xml引用了shiro文件夹中的配置文件3. sprin
Easter79 Easter79
3年前
SSM_基于传统web项目
1.这是一个单模块的项目!有四个配置文件,mybaits,spring。springmvc,web.xml!2.web.xml配置文件,导入spring和springmvc的配置文件,spring配置文件中,获取sqlsession,以及关联mybatis的mpper(增删改查)文件3.mybatis的配置文件则可以不用写
Wesley13 Wesley13
3年前
JavaEE——SpringMVC(13)
!(https://oscimg.oschina.net/oscnet/0a84c4a3b840eca06b2fb77a31f16233bab.jpg)需要进行Spring整合SpringMVC吗?还是否需要再加入Spring的IOC容器?是否需要再web.xml文件中配置启动SpringIOC容器的Con
Wesley13 Wesley13
3年前
Spring3 MVC详解
DispatcherServlet 前置控制器 使用SpringMVC,配置DispatcherServlet是第一步。DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,S
Wesley13 Wesley13
3年前
JavaWeb中的web.xml文件配置解析
一web.xml的文件重要性  web.xml是servlet规定的启动配置文件,凡属基于servlet的javaWeb容器必遵守这个规范,而目前主流的容器都是基于servlet的,因此可以理解web.xml是每个javaweb应用都离不开web.xml配置文件。  web.xml完整的名字应该叫做部署描述符
Easter79 Easter79
3年前
Tomcat
web.xml配置什么是Web.xmlWeb.xml是Web应用部署的重要的描述条件,它支持的元素及属性来自于Servlet规范定义。在tomcat中,Web应用的部署描述信息文件包括tomcat/conf/web.xml以及Web应用的WEBINF/web.xml下的文件。ServletContext
Wesley13 Wesley13
3年前
Spring MVC 自带的字符编码过滤器以及Tomcat字符编码设置,彻底解决中文参数乱码问题
一、SpringMVC字符编码配置javaWeb项目添加Spring支持后,可使用Spring自带的字符编码过滤器。源码在springweb4.1.0.RELEASE.jar包下的org.springframework.web.filter目录的CharacterEncodingFilter.java。在web.xml文件中配置:
Stella981 Stella981
3年前
Serclet java常用的方法以及注释(配web.xml 配置代码)
Serclet是一个容器接口,可以实现Serclet接口来达到简单的Web和Tomcat之间的交互1,web.xml配置代码以及说明<?xmlversion"1.0"encoding"UTF8"?<webappxmlns:xsi"http://www.w3.org/2001/XMLSchemai