[4] Controlador

4. Controlador

4.1, controlador

  • El complejo del controlador proporciona el comportamiento de acceder al programa de aplicación, que generalmente se implementa a través de dos métodos: definición de interfaz o definición de anotación.
  • El controlador es responsable de analizar la solicitud del usuario y transformarla en un modelo.
  • Una clase de controlador puede contener múltiples métodos en Spring MVC
  • En Spring MVC, hay muchas formas de configurar Controller

4.2, implementar la interfaz del controlador

El controlador es una interfaz, en el paquete org.springframework.web.servlet.mvc, solo hay un método en la interfaz;

//实现该接口的类获得控制器功能
public interface Controller {
    
    
   //处理请求且返回一个模型与视图对象
   ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}

prueba

  1. Cree un nuevo Moudle, springmvc-04-controller. Copie el 03 justo ahora, ¡y continuaremos!

    • Eliminar HelloController
    • ¡El archivo de configuración mvc solo sale del analizador de vistas!
    <!--视图解析器:模板引擎 Thymeleaf Freemarker-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
    
  2. Escribir una clase de controlador, ControllerTest

    public class ControllerTest implements Controller {
          
          
        @Override
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
          
          
    
            ModelAndView mv = new ModelAndView();
    
            mv.addObject("msg","Controller测试");
    
            /*跳转页面的名字,在ViewResolver中拼接成字符串视图页面名称*/
            mv.setViewName("controller1");
            return mv;
        }
    }
    
  3. Después de escribir, vaya al archivo de configuración de Spring para registrar el bean solicitado; el nombre corresponde a la ruta de la solicitud y la clase corresponde a la clase de procesamiento de la solicitud

    <!--BeanNameUrlHandlerMapping将实现类注册成bean,bean的id就是url-pattern-->
    <bean id="/c1" class="com.kuber.controller.ControllerTest"/>
    
  4. Escriba el front-end controller1.jsp, preste atención a escribir en el directorio WEB-INF / jsp, correspondiente a nuestro analizador de vistas

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>controller1</title>
    </head>
    <body>
        ${msg}
    </body>
    </html>
    
  5. Configure Tomcat para ejecutar la prueba. No tengo un nombre de versión del proyecto y configuro un /, por lo que la solicitud no necesita agregar el nombre del proyecto, ¡de acuerdo!

    Inserte la descripción de la imagen aquí

Descripción:

  • Implementar el controlador de interfaz para definir el controlador es la forma más antigua
  • La desventaja es: solo hay un método en un controlador, si desea múltiples métodos, necesita definir múltiples controladores, el método de definición es más problemático;

4.3, use la anotación @Controller

  • El tipo de anotación @Controller se usa para declarar que la instancia de la clase Spring es un controlador (las otras 3 anotaciones se mencionan cuando se habla de IOC);

  • Spring puede usar el mecanismo de escaneo para encontrar todas las clases de controlador basadas en anotaciones en la aplicación. Para asegurarse de que Spring pueda encontrar su controlador, debe declarar el escaneo de componentes en el archivo de configuración. No es necesario registrar etiquetas de frijoles en este momento

        <context:component-scan base-package="com.kuber.controller"/>
        <mvc:default-servlet-handler/>
        <mvc:annotation-driven/>
        <!--视图解析器:模板引擎 Thymeleaf Freemarker-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <!--后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    
  • Agregue una clase ControllerTest2 e impleméntela con anotaciones;

    @Controller/*代表这个类会被spring接管,
                   标有这个注解的类的所有方法如果其返回值为string,
                   并且返回值为相应的跳转界面的名称,那么就会被视图解析器解析*/
    public class ControllerTest2 {
          
          
    
        @RequestMapping("c2")
        public String test1(Model model){
          
          
            //Spring MVC会自动实例化一个Model对象用于向视图中传值
            model.addAttribute("msg","Controller测试2");
    		//返回视图位置
            return "controller1";
        }
    }
    
  • Ejecutar la prueba de Tomcat

    Inserte la descripción de la imagen aquí

Se puede encontrar que nuestras dos solicitudes pueden apuntar a una vista, pero los resultados de los resultados de la página son diferentes. De esto podemos ver que la vista se reutiliza y hay una relación de acoplamiento débil entre el controlador y la vista.

El método de anotación es el método más utilizado.

4.4 、 RequestMapping

@RequestMapping

  • La anotación @RequestMapping se usa para asignar la URL a una clase de controlador o un método de controlador específico. Se puede utilizar en clases o métodos. Usado en clases, significa que todos los métodos de la clase que responden a solicitudes usan esta dirección como ruta principal.

  • Para probar las conclusiones con mayor precisión, podemos agregar un nombre de proyecto para probar myweb

  • Anote solo el método

    @Controller
    public class TestController {
          
          
       @RequestMapping("/h1")
       public String test(){
          
          
           return "test";
      }
    }
    

    Ruta de acceso: http: // localhost: 8080 / nombre del proyecto / h1

  • Anotar clases y métodos al mismo tiempo

    @Controller
    @RequestMapping("/admin")
    public class TestController {
          
          
       @RequestMapping("/h1")
       public String test(){
          
          
           return "test";
      }
    }
    

    Ruta de acceso: http: // localhost: 8080 / nombre del proyecto / admin / h1, debe especificar la ruta de la clase y luego la ruta del método;

Supongo que te gusta

Origin blog.csdn.net/weixin_43215322/article/details/111242999
Recomendado
Clasificación