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");?
}?
}?
}??