Dados de resposta do SpringMVC, exceção, interceptor

Dados de resposta do SpringMVC

Resposta da palavra-chave

//转发
如果用了 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
é um objeto fornecido pelo SpringMVC para nós, o objeto também pode ser usado como o valor de retorno do método do controlador.

Existem dois métodos neste objeto:

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

ResponseBody dados de resposta

Requisito:
Use a anotação @ResponseBody para converter o objeto retornado pelo método do controlador em uma resposta json para o cliente.

O Springmvc usa o MappingJacksonHttpMessageConverter para converter dados json por padrão.Você precisa adicionar o jacksonannotations2.9.0.jar do jackson, databind, pacote de dados principal.
Nota: As versões abaixo da 2.7.0 não podem ser usadas para
resolver problemas de codificação:

@RequestMapping (value = "/ testResponseJson", produz = "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; } }

Manipulação de exceção no SpringMVC

Exceção personalizada:
1 Gravar classe de exceção e página de erro

异常类:
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 O manipulador de exceção personalizado implementa a interface 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 Configure o manipulador de exceções

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

Interceptor personalizado

Qual é o uso:

  • Se o programador decidir que o interceptador interceptará a solicitação e depois chamará outros interceptores ou o processador de negócios
  • Se for processado, ele retornará verdadeiro. * Se o programador decidir que não há necessidade de chamar outros componentes para processar a solicitação, ele retornará false.

Os filtros fazem parte da especificação do servlet e qualquer projeto da web em java pode ser usado.
O interceptador é próprio da estrutura SpringMVC e funciona apenas com a estrutura SpringMVC.
Depois que o filtro é configurado com / * no padrão de URL, ele pode interceptar todos os recursos a serem acessados.
Interceptador É um método controlador que apenas intercepta o acesso.Se o acesso for jsp, html, css, image ou js não serão interceptados.
É também uma aplicação específica do pensamento sobre AOP.
Se quisermos personalizar interceptores, devemos implementar: Interface HandlerInterceptor.

A primeira etapa: escreva uma classe comum para implementar a interface HandlerInterceptor

  • Depois que o processador de negócios processou a solicitação, mas o DispatcherServlet é chamado antes de retornar uma resposta ao cliente,
  • Nesse método, a solicitação do usuário é processada.
public class HandlerInterceptorDemo1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse  response, Object handler) throws Exception {

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

return true; }

  • Depois de executar a camada de controle
  • Nesse método, a solicitação é processada na segunda etapa.
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, 
Object handler,ModelAndView modelAndView) throws Exception {
System.out.println("postHandle 方法执行了");
}
  • Depois que todos os processadores de negócios são executados, eles são chamados após a resposta,
  • Nesse método, os recursos são liberados.

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

Etapa 2: configurar o interceptador
Ao usar o SpringMVC, um interceptador de sessão é configurado para interceptar se o usuário está logado, mas o usuário não precisa interceptar ao acessar a página de login e a página de registro, essa tag é necessária

<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 artigos originais · elogiou 2 · visitas 982

Acho que você gosta

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