Preguntas comunes de la entrevista de Spring MVC

En una aplicación web basada en el marco de Spring, ¿cómo se applicationgContext.xmlcarga automáticamente el archivo de configuración de contexto de aplicación de Spring ?

Al ejecutar un proyecto web, el servidor de aplicaciones (JBoss, Tomcat, etc.) primero leerá los web.xmlarchivos en la ruta de origen del proyecto , analizará la configuración en él y encontrará la configuración ContextLoaderListener, por lo que ejecutará ContextLoaderListenerel contextInitializedmétodo en la clase, y se llamará al initWebApplicationContext()método en este método De acuerdo con el nombre del método, podemos ver que este método se utiliza para inicializar un WebApplicationContext. El simple entendimiento es inicializar un contenedor Spring en una aplicación web. En la initWebApplicationContext()implementación del código posterior del método, el archivo especificado se cargará de acuerdo web.xmlcon las contextConfigLocationpropiedades configuradas en el método applicationContext.xml, y el contenedor Spring se inicializará de acuerdo con este archivo.

Si no web.xmlhay contextConfigLocationparámetros de configuración , ¿no se puede cargar el applicationgContext.xmlarchivo?

Si no hay contextConfigLocationparámetros de configuración , la aplicación buscará el /WEB-INF/applicationContext.xmlarchivo en el directorio raíz de la aplicación de forma predeterminada , es decir, esta es una ruta de archivo que se carga de forma predeterminada.

Después de completar la inicialización de WebApplicationContext en esta aplicación web, ¿qué tiene que ver con ServletContext?

En initWebApplicationContextel interior del método de inicialización se contextguardar en ServletContext, en particular, se mantiene a un Mapatributo de tipo, keyes WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, valuees un ejemplo específico de un WebApplicationContext objeto.

Si desea ServletContextobtener esto en el código WebApplicationContext, ¿cómo hacerlo?

El marco Spring proporciona una WebApplicationContextUtilsclase de herramienta, que getWebApplicationContextse puede obtener a través del método de esta clase de herramienta .

Justo ahora ServletContext, ¿para qué se usa?

ServletContextAlgunos métodos se definen para facilitar la comunicación Servletcon el Servletcontenedor. En una aplicación web, todos Servletson comunes ServletContext. Cuando Spring se usa junto con una aplicación web, el contenedor Spring se almacena ServletContexten él. En términos simples, se ApplicationContextalmacena en un ServletContextcontenedor. En una propiedad de Mapa.

Tenía que entender web.xmlen Listener, Filtery la Servletorden de inicialización que?

Primero, <listener>cree una instancia de la clase de escucha declarada con la etiqueta, llame al método del objeto de instancia de clase de escucha contextInitialized(), inicialice los datos de contexto de la aplicación, luego <filter>cree una instancia de la clase de filtro declarada con la etiqueta y llame al método del objeto de instancia de clase de filtro init(); Si <servlet>se usa una etiqueta en la <load-on-startup>etiqueta, se Servletinstancia en orden desde el valor más pequeño hasta el valor más grande , y init()se llama al método correspondiente .

Hablando de eso Servlet, DispatcherServlet¿alguien en Spring MVC lo sabía? ¿Cuéntame sobre su principio de implementación?

DispatcherServletEs el distribuidor principal de SpringMVC. Implementa la distribución de solicitudes y es el punto de entrada para procesar solicitudes. Es uno Servlet. Cuando se inicia la aplicación, la DispatcherServletinicialización ejecutará el initmétodo. DispatcherServletEl initmétodo que se encuentra en el código fuente hereda de él HttpServletBean. En este método de inicialización, se instanciará un WebApplicationContextobjeto, y la inicialización se contextalmacenará ServletContexten él Servletpara asociarlo con el contenedor Spring. En DispatcherServletel onRefreshmétodo, inicializar varias estrategias de procesamiento de solicitudes, tales como la carga de archivos Políticas, estrategia solicitud de procesamiento URL, ver la estrategia de proceso de mapeo, las estrategias de manejo de excepciones, la mayor parte de la puesta en práctica de estas estrategias son un lógico iniciar WebApplicationContextla búsqueda, no pudo encontrar En el caso de la recarga , las diversas estrategias en el DispatcherServletmismo directorio DispatcherServlet.properties, como la inicialización HandlerMapping, el registro de diversas estrategias de procesamiento de solicitudes y clases de procesamiento.

Específicamente, ¿cómo funciona la DispatcherServletdistribución de solicitudes?

En primer lugar, Marco del resorte MVC en el arranque atravesará todos recipiente resorte bean, por marcados @Controllero @RequestMappingmétodo clases anotadas de atravesar las clases superiores y métodos @RequestMappingvalores combinados anotados, @RequestMappinganotaciones relacionadas valor de parámetro (por ejemplo value, methodetc.) un paquete RequestMappingInfo, este Controllerejemplo, el método y la información de parámetros método (tipo, anotaciones, etc.) en el paquete HandlerMethod, y luego a RequestMappingInfocomo key, HandlerMethodpara valuemantener a una a Mapuna estructura de handlerMethodsla.

A continuación, la @RequestMappinganotación de value(es decir, una petición de ruta) valores tomados, que es urly, a continuación, urla keyfin RequestMappingInfode value, en un depósito a Mapuna estructura de la urlMappropiedad.

Cuando el cliente envía una solicitud, de conformidad con una solicitud URLpara urlMapbuscar, localizar RequestMappingInfo, y entonces, de acuerdo RequestMappingInfoa la handlerMethodsconsulta, para encontrar la que corresponde HandlerMethod, entonces HandlerMethodencapsulado HandlerExecutionChain; a continuación, iterar a través de todos los contenedores de HandlerAdapterclase de implementación, encontrar apoyo esta solicitud HandlerAdapter, como RequestMappingHandlerAdapter, a continuación, ejecutar El método frontal ( preHandlemétodo) del interceptor Spring MVC , luego analiza y convierte los parámetros de solicitud, y luego (usando la reflexión) llama al Controllermétodo correspondiente específico para devolver un ModelAndViewobjeto, ejecuta el método ( postHandlemétodo) posterior del interceptor y luego devuelve el resultado Realice el procesamiento y finalmente ejecute el afterCompletionmétodo.

Publicado 94 artículos originales · me gusta 0 · visitas 722

Supongo que te gusta

Origin blog.csdn.net/qq_46578181/article/details/105458281
Recomendado
Clasificación