Datos de respuesta SpringMVC, excepción, interceptor

Datos de respuesta SpringMVC

Respuesta de palabras clave

//转发
如果用了 forward:则路径必须写成实际视图 url,不能写逻辑视图。
它相当于“request.getRequestDispatcher("url").forward(request,response)”。使用请求
转发,既可以转发到 jsp
@RequestMapping("/testForward")
public String testForward() {
System.out.println("AccountController 的 testForward 方法执行了。。。。");
return "forward:/WEB-INF/pages/success.jsp";

//重定向
return "redirect:testReturnModelAndView"; 
它相当于“response.sendRedirect(url)”。需要注意的是,如果是重定向到 jsp 页面,则 jsp 页面不能写在 WEB-INF 目录中,否则无法找到。

ModelAndView
es un objeto proporcionado por SpringMVC para nosotros, el objeto también se puede usar como el valor de retorno del método del controlador.

Hay dos métodos en este objeto:

@RequestMapping("/testReturnModelAndView")
public ModelAndView testReturnModelAndView() {
ModelAndView mv = new ModelAndView();
mv.addObject("username", "张三");//向request域中存入数据
mv.setViewName("success");//转发页面

Respuesta Datos de respuesta del cuerpo

Requisito:
utilice la anotación @ResponseBody para convertir el objeto devuelto por el método del controlador en una respuesta json al cliente.

Springmvc utiliza MappingJacksonHttpMessageConverter para convertir datos json de forma predeterminada. Debe agregar jacksonannotations2.9.0.jar de jackson, databind, paquete de datos principales.
Nota: Las versiones debajo de 2.7.0 no se pueden usar para
resolver problemas de codificación:

@RequestMapping (value = "/ testResponseJson", produce = “application / json; charset = utf-8”)

@Controller("jsonController")
public class JsonController {
/**
* 测试响应 json 数据
*/
@RequestMapping("/testResponseJson")
public @ResponseBody Account testResponseJson(@RequestBody Account account) {
System.out.println("异步请求:"+account);
return account; } }

Manejo de excepciones en SpringMVC

Excepción personalizada:
1 Escribir clase de excepción y página de error

异常类:
package com.wz;

public class SysException extends Exception {
    private String message;

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public SysException(String message) {
        this.message = message;
    }
}




错误页面:
<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${errormsg}
</body>
</html>

2 El controlador de excepciones personalizado implementa la interfaz HandlerExceptionResolver

package com.wz;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

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

public class SysExceptionResovler implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) {
        SysException ex = null;
        if (ex instanceof Exception){
            ex = (SysException)e;
        }else {
                ex = new SysException("系统正在维护。。。。");
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("errormsg",ex.getMessage());
        mv.setViewName("error");
        return mv;
    }
}

3 Configurar el controlador de excepciones

<bean class="com.wz.SysExceptionResovler" id="e"></bean>

Interceptor personalizado

¿Cuál es el uso?

  • Si el programador decide que el interceptor interceptará la solicitud y luego llamará a otros interceptores o al procesador comercial
  • Si se procesa, devuelve verdadero. * Si el programador decide que no hay necesidad de llamar a otros componentes para procesar la solicitud, devuelve falso.

Los filtros son parte de la especificación del servlet, y se puede utilizar cualquier proyecto web java.
El interceptor es el marco del SpringMVC y solo funciona con el marco SpringMVC.
Después de configurar el filtro con / * en el patrón de URL, puede interceptar todos los recursos para acceder.
Interceptor Es un método de controlador que solo intercepta el acceso, si el acceso es jsp, html, css, image o js no serán interceptados.
También es una aplicación específica del pensamiento AOP.
Si queremos personalizar los interceptores, debemos implementar: la interfaz HandlerInterceptor.

El primer paso: escribir una clase común para implementar la interfaz HandlerInterceptor

  • Después de que el procesador comercial haya procesado la solicitud, pero se llame a DispatcherServlet antes de devolver una respuesta al cliente
  • En este método, se procesa la solicitud del usuario.
public class HandlerInterceptorDemo1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse  response, Object handler) throws Exception {

System.out.println("preHandle 拦截器拦截了");

return true; }

  • Después de ejecutar la capa de control
  • En este método, la solicitud se procesa en el segundo paso.
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, 
Object handler,ModelAndView modelAndView) throws Exception {
System.out.println("postHandle 方法执行了");
}
  • Después de ejecutar todos los procesadores de negocios, se les llama después de la respuesta,
  • En este método, se liberan los recursos.

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse 
response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion 方法执行了");
} }

Paso 2: Configurar el interceptor
Cuando se usa SpringMVC, se configura un interceptor de sesión para interceptar si el usuario ha iniciado sesión, pero el usuario no necesita interceptar al acceder a la página de inicio de sesión y la página de registro, entonces se necesita esta etiqueta

<mvc:execlude-mapping />//写在指定拦截的后面

作用路径可以通过在配置文件中配置。
<!-- 配置拦截器的作用范围 -->
 <mvc:interceptors> 
 <mvc:interceptor> 
 <mvc:mapping path="/**" /><!-- 用于指定对拦截的 url -->
  <mvc:exclude-mapping path=""/><!-- 用于指定排除的 url-->
   <bean id="handlerInterceptorDemo1" class="com.itheima.web.interceptor.HandlerInterceptorDemo1"></bean>
</mvc:interceptor>
</mvc:interceptors>
Publicado 43 artículos originales · elogiado 2 · visitas 982

Supongo que te gusta

Origin blog.csdn.net/study_azhuo/article/details/105618994
Recomendado
Clasificación