【Spring】—Anotación de Spring MVC

Anotaciones para Spring MVC

1.DispatcherServlet

Nombre completo de DispatcherServlet:

org.Springframework.web.servlet.DispatcherServlet

Actúa como un controlador frontal en el programa.

[Ejemplo] Al usar DispatcherServlet, solo necesita configurarlo en el archivo web.xml del proyecto, y su código de configuración es el siguiente.

	<servlet>
        <!--配置前端过滤器-->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化时加载配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <!--表示容器在启动时立即加载Servlet -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

En el código anterior, <load-on-startup>tanto el elemento como <init-param>el elemento son opcionales. Si <load-on-startup>el valor del elemento es 1, el Servlet se cargará inmediatamente cuando se inicie la aplicación; si <load-on-startup>el elemento no existe, la aplicación cargará el Servlet cuando se solicite el primer Servlet. Si <init-param>el elemento existe y la ruta del archivo de configuración de Spring MVC está configurada a través de sus subelementos, la aplicación cargará el archivo de configuración en la ruta de configuración cuando se inicie; si no está configurado a través del elemento, la aplicación se configurará de forma predeterminada <init-param>en el directorio WEB-INF para encontrar los archivos de configuración nombrados de la siguiente manera.

servletName-servlet.xml

servletName se refiere al nombre del DispatcherServlet implementado en web.xml, que es springmvc en el código de configuración en web.xml anterior, y -servlet.xml es una forma fija de escribir el nombre del archivo de configuración, por lo que la aplicación será en WEB-INF Busque springmvc-servlet.xml debajo.

2. Tipo de anotación del controlador

El tipo de anotación org.springframework.stereotype.Controller se usa para indicar que la instancia de la clase Spring es un controlador y su forma de anotación es @Controller. Esta anotación no necesita implementar la interfaz del controlador cuando se usa, solo agregue la anotación @Controller a la clase del controlador y luego busque el controlador marcado con la anotación a través del mecanismo de escaneo de Spring.

[Ejemplo] Un ejemplo del uso de la anotación @Controller en una clase de controlador es el siguiente.

package com.ssm.controller;
import org.springframework.stereotype.Controller;
......
//Controller注解
@Controller
public class ControllerTest{
    
    
......
}

Para garantizar que Spring pueda encontrar la clase de controlador, también es necesario agregar la información de configuración de escaneo correspondiente en el archivo de configuración de Spring MVC, de la siguiente manera.

(1) Introducido en la declaración del archivo de configuración spring-context.

(2) Use <context: component-scan>elementos para especificar el paquete de clase que debe escanearse.

El archivo de configuración completo es el siguiente.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!--  指定需要扫描的包  -->
    <context:component-scan base-package="com.ssm.controller"/>
</beans>

<context: component-scan>El atributo base-package del elemento especifica que el paquete de clase que se escaneará es com.ssm.controller. En tiempo de ejecución, Spring procesará todas las clases anotadas en este paquete y sus subpaquetes. En comparación con la forma de implementar la interfaz del controlador, la forma de usar las anotaciones es obviamente más simple. Al mismo tiempo, la clase de implementación de la interfaz del controlador solo puede manejar una sola acción de solicitud, mientras que el controlador basado en anotaciones puede manejar múltiples acciones de solicitud al mismo tiempo , lo que es más flexible en uso. Por lo tanto, el formulario basado en anotaciones generalmente se usa en el desarrollo real.

Aviso

Al usar el método de anotación, la operación del programa debe depender del paquete AOP de Spring, por lo que debe agregar spring.aop-4.3.6 RELEASE.jar al directorio lib; de lo contrario, se informará un error cuando el programa se esté ejecutando. .

3. Tipo de anotación RequestMapping

(1) Uso de la anotación @RequestMapping

Después de que Spring encuentra la clase de controlador correspondiente a través de la anotación @Controller, también necesita saber cómo se procesa cada solicitud dentro del controlador, lo que requiere el uso de org.springframework.web.bind.annotation.RequestMappingtipos de anotación. RequestMapping se usa para mapear una solicitud o un método, y su forma de anotación es @RequestMapping, que se puede anotar en un método o una clase.

(1) marcado en el método

Cuando se marca en un método, el método se convertirá en un método de procesamiento de solicitudes, que se llamará cuando el programa reciba la solicitud de URL correspondiente.

[Ejemplo] Un ejemplo del uso de la anotación @RequestMapping para marcar un método es el siguiente.

package com.ssm.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

......
//Controller注解
@org.springframework.stereotype.Controller
public class AnnotationControllerTest {
    
    
    //@RequestMapping注解标注再方法上
    @RequestMapping(value="/annotationController")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws Exception{
    
    
        ......
        return m;
    }

}

Después de usar la anotación @RequestMapping, se puede http://localhost:8080/chapter11/annotationControlleracceder al método handleRequest() en el código anterior a través de la dirección.

(2) Marca en la clase

Cuando se marcan en una clase, todos los métodos de la clase se asignarán a solicitudes de nivel de clase, lo que significa que todas las solicitudes procesadas por el controlador se asignarán a la ruta especificada por el valor del atributo de valor.

//Controller注解
@Controller

//@RequestMapping注解标注再方法上
@RequestMapping(value = "/controll")
public class AnnotationControllerTest {
    
    
    @RequestMapping(value="/annotationController")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws Exception{
    
    
        ......
        return m;
    }

}

Dado que la anotación @RequestMapping se agrega a la clase y su valor de atributo de valor es "/control", la ruta de solicitud del método de código anterior se convertirá en http://localhost:8080/chapter11/control/annotationController. Si la clase contiene otros métodos, entonces "/ control" también debe agregarse a la ruta de solicitud de otros métodos.

(2) Atributos de la anotación @RequestMapping

Además de especificar el atributo de valor, la anotación @RequestMapping también puede especificar algunos otros atributos, como se muestra en la tabla.

inserte la descripción de la imagen aquí
Todos los atributos son opcionales, pero su atributo predeterminado es el valor. Cuando el valor es su único atributo, se puede omitir el nombre del atributo. Por ejemplo, las dos anotaciones siguientes tienen el mismo significado.

@RequestMapping(value="/annotationController")
@RequestMapping("/annotationController")

(3) Anotaciones combinadas

La anotación @RequestMapping y sus atributos se explicaron en detalle anteriormente, y la anotación combinada se introdujo en Spring 4.3 para ayudar a simplificar el mapeo de los métodos HTTP de uso común y expresar mejor la semántica de los métodos anotados. Sus anotaciones combinadas son las siguientes.

  • @GetMapping: coincide con las solicitudes en modo GET.
  • @PostMapping: coincide con las solicitudes en modo POST.
  • @PutMapping: coincide con las solicitudes PUT.
  • @DeleteMapping: coincide con las solicitudes DELETE.
  • @PatchMapping: solicitudes de coincidencia en modo PATCH.

Tome @GetMapping como ejemplo, la anotación compuesta es @RequestMapping(method=RequestMethod.GET)una abreviatura de Http Get, que asigna Http Get a un método de procesamiento específico. En el desarrollo real, la anotación @RequestMapping tradicional se usa de la siguiente manera.

@RequestMapping(value="/user/{id}",method = RequestMethod.GET)
    public String selectUserById(string id){
    
    
        ......
    }

Después de usar la nueva anotación @GetMapping, el atributo de método se puede omitir para simplificar el código. El uso es el siguiente.

  @GetMapping(value="/user/{fid}")
    public String selectUserById(string id){
    
    
        ......
    }

(4) El tipo de parámetro y el tipo de retorno del método de procesamiento de solicitudes

En la clase de controlador, cada método de procesamiento de solicitudes puede tener varios parámetros de diferentes tipos y un resultado devuelto de varios tipos. Los parámetros del método handleRequest() anterior son los dos tipos de parámetros de HttpServletRequest y HttpServletResponse correspondientes a la solicitud. Además, también se pueden usar otros tipos de parámetros. Por ejemplo, si necesita acceder al objeto HttpSession en el método de procesamiento de solicitudes, puede agregar HttpSession como parámetro y Spring pasará correctamente el objeto al método. El ejemplo de uso es como sigue.

 @RequestMapping(value="/annotationController")
    public ModelAndView (httpSession session)
    {
    
    
        ......
        return m;
    }

En el método de procesamiento de solicitudes, los tipos de parámetros que pueden aparecer son los siguientes.

javax.servlet.ServletRequest/javax.servlet.http.HttpServletRequest
javax.servlet.ServletResponse/javax.servlet.http.HttpServletResponse 
javax.servlet.http.HttpSession 
org.springframework.web.context.request.WebRequest或 
org.springframework.web.context.request.NativeWebRequest 
java.util.Locale
java.util.TimeZone (Java 6+)/java.time.Zoneld(on Java 8) 
java.io.InputStream/java.io.Reader 
Java.io.OutputStream/java.io.Writer 
org.springframework.http.HttpMethod 
java.security.Principal
@PathVariable@MatrixVariable@RequestParam@RequestHeader@RequestBody、 
@RequestPart@SessionAttribute@RequestAttribute注解 
HttpEntity<?> 
java.util.Map/org.springframework.ui.Model/lorg.springframework.ui.ModelMap 
org.springframework.web.servlet.mvc.support.RedirectAttributes 
org.springframework.validation.Errors/org.springframework.validation.BindingResult 
org.springframework.web.bind.support.SessionStatus 
org.springframework.web.util.UriComponentsBuilder

Aviso

El tipo org.springframework.ui.Model no es un tipo de API Servlet, sino un tipo Spring MVC que contiene un objeto Map. Si el parámetro Modelo se agrega al método, Spring MVC creará un objeto Modelo cada vez que se llame al método de procesamiento de solicitudes y lo pasará al método como un parámetro.

En el caso de entrada, el método de procesamiento de solicitudes devuelve un tipo de datos ModelAndView. Además de este tipo, los métodos de manejo de solicitudes pueden devolver otros tipos de datos. Los tipos de devolución de métodos comunes admitidos por Spring MVC son los siguientes.

 ModelAndView 
 Model 
 Map 
 View 
 String 
 void 
 HttpEntity<?>ResponseEntity<?> 
 Callable<?> 
  DeferredResult<?>

Entre los tipos de devolución enumerados anteriormente, los tipos de devolución comunes son ModelAndView, String y void. Entre ellos, los datos del modelo se pueden agregar al tipo ModelAndView y se puede especificar la vista; el valor de retorno del tipo String puede saltar a la vista, pero no puede transportar datos; y el tipo void se usa principalmente en solicitudes asincrónicas. solo devuelve datos y no salta a la vista.

Dado que el tipo ModelAndView no logra el desacoplamiento entre los datos y las vistas, durante el desarrollo, el tipo de retorno del método generalmente usa String. Dado que el valor de retorno del tipo String no puede transportar datos, ¿cómo llevar los datos a la página de vista en el método? Esto utiliza el tipo de parámetro Modelo explicado anteriormente, a través del cual se pueden agregar los atributos que deben mostrarse en la vista.

El código de muestra para el método que devuelve el tipo String es el siguiente.

 @RequestMapping(value="/annotationController")
    public String handleRequest(HttpServletRequest arg0, HttpServletResponse arg1,
                                Model model)throws Exception{
    
    
        model.addAttribute("msg","第一个Spring MVC程序");
        return "/WEB-INF/jsp/welcome.jsp";
   }

En el código del método anterior, se agrega un parámetro de tipo Modelo y los datos requeridos se pueden agregar a través del método addAttribute() de la instancia del parámetro. Además de devolver la página de visualización en el código anterior, el tipo String también puede restablecer la redirección y solicitar el reenvío. Los métodos específicos son los siguientes.

(1) reinicio de redirección

Por ejemplo, después de modificar la información del usuario, el código de implementación para redirigir la solicitud al método de consulta del usuario es el siguiente.

@RequestMapping(value="/update")
    public String update(HttpServletRequest request, HttpServletResponse response,
                                Model model){
    
    
        //复位向请求路径
        return "redirect: queryUser";
   }

(2) reenvío de solicitud de reenvío

Por ejemplo, cuando el usuario realiza una operación de modificación, el código de implementación enviado a la página de modificación del usuario es el siguiente.

    @RequestMapping(value="/toEdit")
    public String toEdit(HttpServletRequest request, HttpServletResponse response,
                         Model model){
    
    
        //复位向请求路径
        return "forward: editUser";
    }

4. ViewResolver (ver resolver)

La resolución de vista en Spring MVC es responsable de analizar la vista. Puede definir un ViewResolver en el archivo de configuración para configurar la resolución de vista. El ejemplo de configuración es el siguiente.

    <!--定义视图解析器-->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--设置前缀-->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!--设置后缀-->
        <property name="suffix" value=".isp" />
    
    </bean>

En el código anterior, se define una resolución de vista cuyo id es viewResolver y se establecen las propiedades de prefijo y sufijo de la vista. Después de esta configuración, la ruta de visualización definida en el método se simplificará. Por ejemplo, el nombre de la vista lógica en el caso de entrada solo debe establecerse en "bienvenido" en lugar de "/WEB-INF/jsp/welcome.jsp", y la resolución de vista agregará automáticamente el prefijo y el sufijo al acceder.

Supongo que te gusta

Origin blog.csdn.net/weixin_45627039/article/details/131258309
Recomendado
Clasificación