Red de conocimiento informático - Material del sitio web - Cómo obtener más información sobre Spring MVC

Cómo obtener más información sobre Spring MVC

SpringMVC es un marco MVC liviano Debido a su implementación liviana y su perfecta integración con Spring Framework, SpringMVC se ha destacado entre los marcos MVC en los últimos años y ha sido favorecido por muchos desarrolladores. imperativo.

Uso de SpringMVC en un entorno web: SpringMVC proporciona un SpirngMVC integrado en forma de marco conectable. Para insertarlo o desinstalarlo de un proyecto web, solo necesita modificar el archivo de configuración.

Al configurar el controlador front-end, el programa de entrada de SpringMVC es un Servlet global. Este Servlet intercepta un conjunto específico de solicitudes para que el marco SpringMVC pueda realizar operaciones de procesamiento posteriores. .xml.

[java]?ver plano?copiar

lt;! --¿Controlador frontal SpingMVC?

lt;!

lt;servletgt;?

lt;servlet-namegt;dispatcherlt;/servlet-namegt;?

lt;servlet-classgt;org.springframework.web.servlet.DispatcherServletlt;/servlet-classgt;?

lt;! --? ¿Configurar el contenedor SpringMVC IOC? --gt;?

lt;init-paramgt;?

lt;param-namegt;contextConfigLocationlt;/param-namegt;?

lt;param -valuegt;/WEB-INF/root-context.xmllt;/param-valuegt;?

lt;/init-paramgt;?

lt;load-on-startupgt; 1lt;/load-on-startupgt;?

lt;/servletgt;?

lt;! --?¿Configurar para interceptar todas las solicitudes? --gt;?

lt;servlet-mappinggt;?

lt;servlet-namegt;dispatcherlt;/servlet-namegt;?

lt;url-patterngt;/lt ;/url-patterngt;?

lt;/servlet-mappinggt;lt;/spangt;lt;/spangt;?

Crear el archivo de configuración root-context para SpringMVC IOC contenedor. xml y define el analizador de vistas, la ubicación es /WEB-INF/

[java]?view Plain?copy

lt;;! --?¿Configurar paquetes para escaneo automático? --gt;?

lt;context: componente-scan?base-package="cn.com.xiaofen"?/gt;?

lt;?--?Definición ¿Ver solucionador?

lt;!

lt;bean?

class="org.springframework.web.servlet.view.InternalResourceViewResolver"gt;?

lt;property?name="prefijo"?value="/WEB-INF/view/"gt;lt;/propertygt;?

lt;property?name="sufijo"?value =".jsp"gt;lt;/propertygt;?

lt;/beangt;?

lt;! --?lt;mvc:default-servlet-handler?/gt;lt;mvc:annotation-driven?/gt;?--gt;lt;/spangt;lt;/spangt;?

Al definir un controlador, SpringMVC define métodos para responder a las solicitudes de los clientes, reduciendo así la sobrecarga de memoria y mejorando la eficiencia.

[java]?ver plano?copiar

@Controller?

@RequestMapping("/T")?

¿público?

¿público?{

System.out.println("t_1");?

return?"index";?

}?

}?

Al definir una vista, la configuración de la vista relacionada debe completarse de acuerdo con el solucionador de vistas real. La vista actualmente configurada debe estar en /WEB-INF. /view/? y el tipo de archivo es un archivo JSP. Específicamente, se debe crear un nuevo nombre de archivo jsp de índice en este directorio.

Flujo de trabajo de procesamiento de solicitudes SpringMVC: DispatcherServlet, como programa de entrada del marco SpringMVC, es responsable de programar el marco SpringMVC para responder a las solicitudes de los usuarios. La siguiente figura muestra el proceso de programación aproximado que necesita la macro SpingMVC. pasar para procesar una solicitud.

La solicitud ingresa al controlador front-end (DispatcherServlet) para su interceptación.

El controlador front-end analiza la solicitud y la delega a un controlador específico para su procesamiento.

El controlador maneja la solicitud y devuelve la vista lógica (modelo).

El controlador de front-end obtiene el objeto de vista lógica, envía el analizador de vista y analiza la plantilla de vista respondida por el usuario.

Vuelve al controlador frontal.

Proceso de solicitud SpringMVC (análisis parcial del código fuente): a partir del método doService () de DispatcherServlet, en términos de relación espacial, solo el código principal se enumera a continuación y se garantiza que el siguiente código estará en orden cronológico.

DispatcherServlet llama a doDispatch para manejar la solicitud.

[java]?ver plano?copiar

probar?{?

/*Vista lógica y modelo mencionados anteriormente*/?

ModelAndView?

¿Excepción?dispatchException?=?null;?

¿Intentar?{?

/* Preprocesamiento de carga de archivos*/?

processedRequest?=?checkMultipart(request);?

multipartRequestParsed?=?(processedRequest! =?request);?

/* Determinar el procesador de la solicitud actual*/ ?

mappedHandler?=?getHandler(processedRequest);?

/* El recurso solicitado no fue encontrado*/?

if(mappedHandler ==?null ?| |?mappedHandler.getHandler()?{||?mappedHandler.getHandler()?==?null)?

noHandlerFound(processedRequest,?response);?

return ;?

}?

/* Determinar el adaptador del controlador para la solicitud actual*/?

HandlerAdapter?

//. ... .......?

////Aplicar interceptores antes de enviar la solicitud*/?

if(!mappedHandler.applyPreHandle(processedRequest,? Response)) ?{

return;?

}?

/*callHandler*/?

mv?=?ha. ,?response,?mappedHandler.getHandler());?

//......?

//* Interceptor aplicado después del envío de la solicitud* /?

mappedHandler.applyPostHandle(processedRequest,?response,?mv);?

}?

catch?{

dispatchException ?

}?

/* Analizar la vista para proporcionar una respuesta al usuario*/?

processDispatchResult(processedRequest, ?response, ?mappedHandler, ?mv, ? DispatchException) ;?

}?

Comprenda HandlerMapper. HandlerMapper representa la asignación de solicitudes a objetos manejadores, y los objetos manejadores se crean en función de la relación solicitud-respuesta. La parte del método getHandler en el código fuente se analiza de la siguiente manera.

[java]?view Plain?copy

protected?HandlerExecutionChain?getHandler(HttpServletRequest?request)?throws?Exception?{? ¿que cumple la condición?

¿para?(HandlerMapping?hm?:?this.handlerMappings)?{

if?(logger.isTraceEnabled())?{

logger.trace(?

"¿Pruebas?handler?map?["? ?hm? ?"] ?in?DispatcherServlet?with?name?'"? ?getServletName()?

}?

}?

HandlerExecutionChain?handler?=?hm.getHandler(solicitud);?

if(handler! =?null )?{

¿Existe?

controlador de devolución;?

}?

}?

¿No existe?

return?

}?

Después de comprender HandlerAdapter, SpringMVC llama a la función real en el código fuente que maneja la solicitud a través del método de controlador de HandlerAdapter. La parte es la siguiente.

[java]?view Plain?copy

protected?HandlerAdapter?getHandlerAdapter(Object?handler)?throws?{

if(logger. isTraceEnabled())?{

logger.trace("¿Pruebas?handler?adapter?["? ?ha? ?"]") ;?

}?

¿Se admite el procesamiento del HandlerMapper actual? {

¿retorno?

}?

}?

¿El HandlerMapper actual no se puede procesar para informar una anomalía?

throw?new?ServletException("No?adapter?for?handler?["? ?handler? ?

"]: La configuración de DispatcherServlet debe incluir un HandlerAdapter que admita esto handler ");?

}?

Del modelo a la vista, SpringMVC ModelAndView conserva la relación entre la vista lógica y la vista real, determinando la Vista devuelta por la solicitud actual del usuario, fuente ProcessDispatchResult El análisis del código es el siguiente.

[java]?Ver copia simple

private?void?processDispatchResult(HttpServletRequest?request,?HttpServletResponse?response,?

HandlerExecutionChain?mappedHandler,?ModelAndView ?

/* Manejar mensajes de excepción*/?

if (excepción! =?null)?{

if(excepción?instanceof?ModelAndViewDefiningException)?{

logger.debug("ModelAndViewDefiningException?encountered",?exception);?

mv?=?((ModelAndViewDefiningException)?exception).getModelAndView();?

}?

else?{?

¿Objeto?handler?=?(mappedHandler! =?nullmappedHandler.getHandler()? :?null);?

mv?=?processHandlerException(solicitud,?respuesta,?controlador,?excepción);?

errorView?(mv! =?null);?

}?

}?

/* Renderiza la vista y devuelve la respuesta*/?

if?(mv! =?null?amp;amp;?!mv .wasCleared ())?{

render(mv, solicitud, respuesta);?

if(errorView)?{

WebUtils.clearErrorRequestAttributes(solicitud) ;?

}?

}?

¿otra cosa?{?

si?(logger.isDebugEnabled())?{

logger.debug("¿Nulo?ModelAndView?devuelto?a?DispatcherServlet?con?nombre?'"? ?getServletName()? ?getServletName()?

"':?suponiendo ?HandlerAdapter ?solicitud completada?manejo");?

}?

}?

}??