Tema de salto simple
Personalmente recomiendo practicar el proceso de construcción nuevamente. Si se siente problemático, puede copiar el proyecto anterior directamente, pero debe modificar un poco de información en pom.xml.
<MoupRid> com.hanpang.springmvc </groupid> <artifactId> springmvc-demo01 </arfactid> <versión> 0.0.1-snapshot </versever>
1. Clases de configuración central y clases de carga
paquete com.hanpang.config; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; importar; org.springframework.web.servlet.config.annotation.enableWebmvc;@configuration@enablewebmvc@componentscan (basepackages = "com.hanpang. **. web") clase pública webconfig {} paquete com.hanpang.config; import org.springframework.web.servlet.support.abstractannotationconfigdispatcherservletinitializer; public class webInitializer extiende abstractAnnotationConfigDispatcherservletinitiniTinitializer {@Override proteged Class <] GetRootConfigClasses () {WebConfig.Class}; } @Override Clase protegida <?> [] GetServletConfigClasses () {return null; } @Override String protegido [] getServletMappings () {return new String [] {"/"}; }}2. Método de salto en el escenario de Javaweb
Tenga en cuenta los parámetros formales en el método SpringMVC, el marco completa la operación de instancia para nosotros.
paquete com.hanpang.web; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.modelandView; @controlador // Dígale que es un controlador de clase pública Demo01Controller { @@RquestMapping (path = "/test01") Modely Model -Jump_Request Solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {System.out.println ("Los parámetros formales se instancian de forma predeterminada"); request.getRequestDIsPatcher ("/web-inf/jsp/demo01.jsp"). avance (solicitud, respuesta); regresar nulo; } @RequestMapping (Path = "/test02") public ModelAndView Way tradicional Jump_redirect (HttpServletRequest Solicitud, HttpServletResponse Respuesta) lanza IOException {System.out.println ("Los parámetros formales se instantan de forma predeterminada"); respuesta.sendedirect (request.getContextPath ()+"/ver/result01.jsp"); regresar nulo; }} Nota: Casi ya no usamos este método, solo una simple demostración y revisión, ¡al menos podemos usar este método para obtener la API Servlet!
3. Demuestre cómo el controlador salta a JSP
Al final del ejemplo, agregaremos el analizador JSP. Al principio, seguiremos seguimos el método tradicional y tendremos un proceso paso a paso.
paquete com.hanpang.web; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandview; @controlador // dígale que es un controlador de clase pública Demo01Controller {@RequestMapping (path = "/test03") ModelandView por defecto, se solicita hacia adelante () {) {) {) {) {ModelAwn ModelandView (); mav.setViewName ("/web-inf/jsp/demo01.jsp"); regresar mav; } @RequestMapping (path = "/test04") public ModelAndView Establecer el método de redirección () {modelandView mav = new ModelAndView (); mav.setViewName ("redirect: /view/result01.jsp"); // o //mav.setViewName(URLBasedViewResolver.Redirect_URL_PREFIX+"/View/Result01.jsp "); regresar mav; }} Se siente como el método del escenario web de Java, pero un prefijo simple se establece durante la redirección.
4. Demuestre cómo el controlador salta al controlador
Similar a llamar de un servlet a otro
paquete com.hanpang.web; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandview; @controlador // dígale que es una clase pública de controlador Demo01Controller {@RequestMapping (path = "/test05") Public ModelandView Set la ruta de mapeo () ModelandView (); mav.setViewName ("/test03"); regresar mav; } @RequestMapping (path = "/test06") public ModelAndView set redirection () {modelandView mav = new ModelAndView (); mav.setViewName ("redirect:/test04"); regresar mav; }} 5. Agregar JSP Ver analizador
Durante la demostración anterior, encontramos que el SetViewName en ModelAndView se usa para completar el salto. Los datos pasados aquí son una cadena, pero el método de procesamiento es diferente. Cuando la ruta de salto tiene prefijo redirección:, el método de procesamiento es diferente.
Además, si tenemos múltiples cadenas similares a /webinf/jsp/demo01.jsp, encontramos que hay muchas partes públicas. SpringMVC nos proporciona una clase que se especializa en el manejo de las solicitudes de controlador que reenvía las páginas JSP.
Tenga en cuenta mi descripción: si encuentra que la cadena que pasó no tiene ningún identificador de prefijo, entonces de manera predeterminada, use el analizador de vista JSP de configuración para manejarla y complete la operación de reenvío de solicitudes de solicitud
Nota: Configure la clase de configuración central
paquete com.hanpang.config; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.enablewebmvc; import org.springframework.web.servlet.view.internalresourceViewResolver; import; org.springframework.web.servlet.view.jstlview;@configuration@habilitéWebmvc@componentsCan (basepackages = "com.hanpang. **. web") clase pública webconfig {@bean // Instantiate public ViewResolver ViewResolver () InternalResourCeViewResolver (); jspviewresolver.setViewClass (jstlview.class); // springmvc admite jstl etiqueta jspViewResolver.setPrefix ("/webinf/"); jspViewResolver.setsuffix (". jsp"); return jspViewResolver; }} ** Nota: ** Por favor preste atención a la anotación del método @Bean
El método es equivalente al código en XML de la siguiente manera
<bean id = "jspresourceViewRresolver"> <Property name = "prefix" valor = "/web-inf/"/> <propiedad name = "suffix" value = ". jsp"/> <propiedad name = "viewclass" value = "org.springframework.web.servlet.view.jstlview"/> </bean>
Mejorar el código JSP de salto del controlador
Este analizador de vista solo puede reenviar las solicitudes de JSP y no es válido para las redirecciones. Preste atención al contenido de comentarios del código
@RequestMapping (path = "/test03") public ModelAndView de forma predeterminada, se solicita que se reenvíe () {modelandView mav = new ModelAndView (); //mav.setviewName("/webinf/jsp/demo01.jsp "); // Avanzado: de forma predeterminada, se manejará utilizando el analizador JSP View, // prefix+"jsp/demo01"+suffix => /webinf/jsp/demo01.jsp mav.setviewName ("jsp/demo01"); // Encontré que la cadena no tiene modificación de prefijo MAV; } @RequestMapping (path = "/test04") public ModelAndView Establecer el método de redirección () {modelandView mav = new ModelAndView (); // El analizador invalida redirección mav.setViewName ("redirect: /view/Result01.jsp"); regresar mav; } Mejorar el código del controlador de salto del controlador
@RequestMapping (path = "/test05") public ModelAndView Establezca directamente la ruta de mapeo () {modelandView mav = new ModelAndView (); mav.setViewName ("/test03"); return mav;}Después de configurar el analizador de vista JSP, pruebe el código anterior nuevamente y vea los resultados de acceso con sorpresa.
Se ajusta a lo que dijimos antes "/test03" es una cadena que se procesará de forma predeterminada utilizando el analizador JSP. Entonces, ¿cómo mejorarlo?
Puede establecer el prefijo "hacia adelante:", y el código se mejora de la siguiente manera:
@RequestMapping (path = "/test05") public ModelAndView Establezca directamente la ruta de mapeo () {modelandView mav = new ModelAndView (); mav.setViewName ("Forward:/test03"); // o //mav.setViewName(UrlBasedViewResolver.forward_url_prefix+"/test03 "); return mav;} Cuando se encuentra que la cadena se modifica con Forward:, la situación de procesamiento cambia para convertir de la solicitud del controlador a otro controlador. Si se realiza la redirección, el código es el siguiente:
@RequestMapping (path = "/test06") public ModelAndView set redirect () {modelandView mav = new ModelAndView (); mav.setViewName ("redirect:/test04"); return mav;} 6. Inpéndice de InterternResourceViewResolver
InternalResourceViewResolver: es una subclase de URLBasedViewResolver, por lo que admite todas las características admitidas por URLBasedViewResolver.
En aplicaciones prácticas, InternalResourceViewResolver también es el resolutador de vista más utilizado. Entonces, ¿cuáles son las características únicas de InternalResourceViewResolver?
Desde un punto de vista literal, podemos interpretar internerresurceViewResolver como un resolución de vista de recursos internos. Esta es una característica de InternalResourceViewResolver.
InternalResourCeViewResolver resolverá los nombres de vista devueltos en los objetos internerresurceView. InternalResourceView almacenará los atributos del modelo devueltos por el método del procesador del controlador en los atributos de solicitud correspondientes, y luego redirigirá la solicitud a la URL de destino en el lado del servidor a través de requestdisPatcher.
Por ejemplo, en InternalResourceViewResolver, prefix =/web-inf/, sufix = .jsp se define en internalresourceViewResolver, y luego el nombre de vista devuelto por el método del procesador del controlador solicitado se prueba. En este momento, InternerResourceViewResolver analizará la prueba en un objeto internereurceView, primero almacene primero los atributos del modelo devuelto en el atributo httpservletrequest correspondiente y luego use requestDisPatcher para reenviar la solicitud a /web-inf/test.jsp en el lado del servidor. Esta es una característica muy importante de InternalResourceViewResolver. Todos sabemos que el contenido almacenado en / web-Inf / no puede solicitarse directamente a través de la solicitud de solicitud. Por razones de seguridad, generalmente colocamos el archivo JSP en el directorio Web-INF, y la forma en que InternerResourceView salta en el lado del servidor puede resolver bien este problema. A continuación se muestra una definición de un internereurceViewResolver. De acuerdo con esta definición, cuando se prueba el nombre de vista lógica devuelta, internerresourceViewResolver le agregará un prefijo y sufijo definidos, forme "/webinf/test.jsp", y luego lo usará como una url interna de reseurceview para crear un nuevo objeto InternerReseurCeview.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.