Spring Mvc: Conociendo Spring Mvc por primera vez

Software de compilación: IntelliJ IDEA 2019.2.4 x64
Sistema operativo: win10 x64-bit Home Edition
Versión Maven: apache-maven-3.6.3
Versión Mybatis: 3.5.6
Versión SpringMvc: 5.3.1



inserte la descripción de la imagen aquí


1. ¿Qué es SpringMvc?

①SpringMVC es un marco secundario de Spring . Es un marco web excelente basado en el concepto de diseño MVC proporcionado por Spring para [ capa de presentación | capa de presentación | capa de presentación | capa de control ] . Actualmente es el marco MVC más convencional.

¿Cuál es la filosofía de diseño de Mvc?

Es la idea de diseño de Mvc, a saber, Modelo (modelo de negocio), Vista (vista de usuario) y Controlador (capa de control)

¿Por qué utilizar el concepto de diseño Mvc?

En pocas palabras, el concepto de diseño de MVC proporciona una forma estructurada de organizar el código de la aplicación, lo que permite a los desarrolladores administrar mejor la complejidad, mejorar la eficiencia del desarrollo y lograr un código mantenible, escalable y comprobable.

②SpringMVC no es intrusivo

¿Qué es no intrusivo?

Hace hincapié en un patrón de desarrollo, 在使用框架的同时尽量减少对应用程序代码的依赖和修改,使得框架与应用程序之间的耦合度降低。específicamente, 在SpringMVC中,你可以编写普通的Java类作为控制器,并通过注解或配置将其标识为处理特定URL请求的方法. De esta manera, le permite mantener la estructura original y la lógica comercial de la aplicación sin obligarlo a cambiar la organización del código de acuerdo con las especificaciones del marco.

③SpringMVC se usa para reemplazar Servlet Antes de usar el marco SpringMvc, generalmente procesamos solicitudes y respondemos en función de Servlet.


2. ¿Cómo ejecuta SpringMvc los procesos de negocio?

El proceso simple de ejecución comercial de SpringMvc es el siguiente

inserte la descripción de la imagen aquí

  1. El usuario envía una solicitud al backend a través del navegador.
  2. DispatcherServlet es un Servlet que recibe todas las solicitudes como punto de entrada de la aplicación y se encarga de coordinar todo el flujo de procesamiento.
  3. DispatcherServlet encuentra el procesador (controlador) adecuado para procesar la solicitud actual de acuerdo con la consulta del mapeador de procesador configurado (HandlerMapping).
  4. El asignador de controladores asigna las solicitudes a los controladores apropiados en función de la URL solicitada u otros criterios. Un controlador puede ser una clase, generalmente identificada con una anotación (como @Controller), o una clase que implementa una interfaz específica (como HandlerInterceptor).
  5. El asignador de controladores simplemente encapsula la solicitud para obtener el objeto de la cadena de ejecución del controlador (HandlerExecutionChain) y lo devuelve a DispatcherServlet, que incluye el propio controlador, los interceptores y otros procesadores auxiliares.
  6. DispatcherServlet llama al método de preprocesamiento del procesador (preHandle) a través de la cadena de interceptores, para que pueda preparar algunos datos compartidos y preprocesar la solicitud.
  7. De acuerdo con el procesador en la cadena de ejecución del procesador, DispatcherServlet encuentra el objeto de adaptador de procesador correspondiente HandlerAdapter. Esto se debe a que hay más de un tipo de procesador y diferentes procesadores requieren diferentes adaptadores de procesador HandlerAdapter para ejecutarse.
  8. Después de encontrar el adaptador de procesador correspondiente, DispatcherServlet llama inmediatamente al adaptador de procesador para permitirle ejecutar el procesador.
  9. Después de que el adaptador de procesador ejecuta el procesador, el procesador devuelve ModelAndView al adaptador de procesador.
  10. Después de que el adaptador del procesador recibe ModelAndView devuelto por el procesador, devuelve directamente ModelAndView a DispatcherServlet.
  11. Después de que DispatcherServlet recibe ModelAndView enviado por el adaptador del procesador, no lo toma como el resultado final de la programación, sino que primero llama al método de backend del interceptor en la cadena de ejecución del procesador de ejecución. Debido a que DispatcherServlet pasa el objeto ModelAndView al método de backend del interceptor, el método de backend puede modificar ModelAndView.
  12. El trabajo de la resolución de vistas vincula el nombre de la vista con el objeto de posicionamiento de destino de la respuesta, forma un objeto de vista y lo devuelve al DispatcherServlet.
  13. Después de obtener el objeto de vista correspondiente, DispatcherServlet llama al método de representación del objeto de vista para representar realmente la vista.
  14. DispatcherServlet realiza el trabajo de acabado, que ejecuta el método afterCompletion() del interceptor de la cadena de ejecución del procesador. La respuesta final a la solicitud la emite el método afterCompletion().
  15. El navegador recibe la respuesta.

3. Cómo construir el primer HelloWorld basado en SpringMvc

3.1 Pasos para construir el marco SpringMvc

①Cree un proyecto Maven en IDEA e importe paquetes jar relacionados

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

¿Por qué establecer el alcance de javax.servlet-api como proporcionado aquí?

Debido a que el servidor Tomcat ya tiene una javax.servlet-api, si el rango de dependencia del paquete jar javax.servlet-api se establece en el servidor Tomcat en pop.xml, los paquetes jar de los dos servlets entrarán en conflicto.

inserte la descripción de la imagen aquí

② Escribir el archivo de configuración

  • Registrar DispatcherServlet en web.xml

    • urconfig:/
      • init-param: contextConfigLocation, set springmvc, ruta del archivo de configuración xml [objeto contenedor de administración]
      • <load-on-startup>: establece la prioridad DispatcherServlet [Al iniciar el servidor, crea el objeto Servleti actual]
  • Implemente las siguientes funciones en springmvc.xml

    • Activar el escaneo de componentes
    • Configure View Parser [Parse View (Establecer vista de prefijo y sufijo)]

③ Escribir un procesador de solicitudes [Controlador | Manejador]

  • Use la anotación @Controlleri para identificar los controladores de solicitudes
  • Use la anotación @RequestMapping para identificar el método de procesamiento [URL]

inserte la descripción de la imagen aquí

④ Preparar la página para la prueba

3.2 Combate real de HelloWorld

① preparación

Cree un nuevo proyecto Maven y cree un entorno de proyecto web en él. La estructura del proyecto es la siguiente

inserte la descripción de la imagen aquí

②Importar paquetes jar relacionados en pop.xml en el proyecto Maven

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring5 -->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

③Habilite el análisis de componentes y el analizador de vista de configuración en [springmvc.xml] en el archivo de configuración de Spring

<!--  开启组件扫描  -->
<context:component-scan base-package="spring"></context:component-scan>

<!-- 配置视图解析器【解析视图(设置视图前怨后缀)】 -->
<!--  配置视图解析器  -->
<bean id="thymeleafViewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    <!--鹿置字符集属性 -->
    <property name="characterEncoding" value="UTF-8"></property>
    <!--鹿置模板引擎厨性-->
    <property name="templateEngine">
        <!--鹿置内bean-->
        <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
            <!--鹿置馍块的解析器雨性-->
            <property name="templateResolver">
                <!--     配置内部bean       -->
                <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                    <!--  配置前缀        -->
                    <property name="prefix" value="/WEB-INF/pages/"></property>
                    <!--   配置后缀       -->
                    <property name="suffix" value=".html"></property>
                    <!--   配置字符集                     -->
                    <property name="characterEncoding" value="UTF-8"></property>
                </bean>
            </property>
        </bean>
    </property>
</bean>

④ Registrar DispatcherServlet [Controlador frontal] en web.xml

<!-- 注册 Dispatcherservlet【前满控制器】-->
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>

    <!--  设置DispatcherServlet优先级      -->
    <!--   启动服务器时,创建当前Servleti对象     -->
    <load-on-startup>1</load-on-startup>

</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

⑤Cree una nueva clase HelloController del proyecto actual en /src/main/spring/Controller como procesador de solicitudes, use la anotación @Controlleri para identificarlo como procesador de solicitudes y use la anotación @RequestMapping para identificar el método de procesamiento [URL]

inserte la descripción de la imagen aquí

@Controller
//标识此类为请求处理器
public class HelloController {
    
    

    //配置url【/】  映射到wEB-INF/index.html
    @RequestMapping("/")
    public String toIndex(){
    
    
        //WEB-INF/pages/index.html
        //物理视图名=视图前餐+逻辑视图名+视图后缀
        return "index";
    }

    /**
     * 配置url【/HelloControllerMethod】,浏览器中的请求会基于该url,找到并进入下面的方法
     */
    @RequestMapping("/HelloControllerMethod")
    public String HelloControllerMethod(){
    
    
        System.out.println("--->请求已经进入到HelloControllerMethod方法中");
        //默认是转发请求
        return "success";
    }
}

⑥ Escribir páginas de inicio relacionadas [index.html y success.html]

<!-- index.html -->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
<a th:href="@{/HelloControllerMethod}">发送请求</a>
</body>
</html>
<!-- success.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>转发成功,到达成功页面</title>
</head>
<body>
<h1>成功页面</h1>
</body>
</html>

⑦ Inicie el servidor Tomcat y ejecute la prueba

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí


Supongo que te gusta

Origin blog.csdn.net/siaok/article/details/131596204
Recomendado
Clasificación