Explicação detalhada do interceptor SpringMVC e mecanismo de manipulação de exceção SpringMVC
Interceptores SpringMVC
O papel do interceptador
O interceptor do Spring MVC é semelhante ao filtro no desenvolvimento de Servlet, que é usado para pré-processar e pós-processar o processador.
Os interceptores são ligados em uma determinada ordem em uma cadeia, que é chamada de Cadeia Interceptora. Quando um método ou campo interceptado é acessado, os interceptores na cadeia de interceptores são chamados na ordem em que foram definidos anteriormente. Interceptor também é uma realização concreta da ideia AOP.
A diferença entre interceptores e filtros
Início rápido do interceptador
O interceptor personalizado é muito simples, existem apenas três etapas:
① Crie uma classe de interceptor para implementar a interface HandlerInterceptor
② Configure o interceptor
③ Teste o efeito de interceptação do interceptor
① Crie uma classe interceptor para implementar a interface HandlerInterceptor
public class MyHandlerInterceptor1 implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler) {
System.out.println("preHandle running...");
return true; }
public void postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler, ModelAndView modelAndView) {
System.out.println("postHandle running...");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse
response, Object handler, Exception ex) {
System.out.println("afterCompletion running...");
} }
② Configure o interceptor
<!--配置拦截器-->
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/>
<bean class="com.itheima.interceptor.MyHandlerInterceptor1"/>
</mvc:interceptor>
</mvc:interceptors>
③ Teste o efeito de interceptação do interceptor (escreva o método de destino)
@RequestMapping("/quick23") @ResponseBody
public ModelAndView quickMethod23() throws IOException, ParseException {
System.out.println("目标方法执行....");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","itcast");
modelAndView.setViewName("index");
return modelAndView; }
Descrição do método do interceptor
Tratamento de exceção SpringMVC
Ideias de tratamento de exceção
Existem dois tipos de exceções no sistema: exceções esperadas e exceções de tempo de execução , RuntimeException.O primeiro obtém informações de exceção capturando exceções, e o último reduz principalmente a ocorrência de exceções de tempo de execução padronizando o desenvolvimento e teste de código.
O Dao, Service e Controller do sistema são todos lançados para cima por meio de throws Exception e, finalmente, o controlador front-end SpringMVC é entregue ao manipulador de exceção para tratamento de exceção, conforme mostrado na figura a seguir:
Duas formas de tratamento de exceções
1. Use o manipulador de exceção simples SimpleMappingExceptionResolver fornecido pelo Spring MVC
2. Implemente a interface de manipulação de exceção do Spring HandlerExceptionResolver para personalizar seu próprio manipulador de exceção
Manipulador de exceção simples SimpleMappingExceptionResolver
SpringMVC definiu este tipo de conversor, podendo mapear e configurar a exceção e visualização correspondente de acordo com a situação do projeto ao utilizá-lo.
<!--配置简单映射异常处理器-->
<bean
class=“org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”> <property name=“defaultErrorView” value=“error”/> //默认错误视图
<property name=“exceptionMappings”> <map> //异常类型 错误视图
<entry key="com.itheima.exception.MyException" value="error"/>
<entry key="java.lang.ClassCastException" value="error"/>
</map>
</property>
</bean>
Etapas personalizadas de tratamento de exceções
① Criar classe de tratamento de exceção para implementar HandlerExceptionResolver
② Configurar tratamento de exceção
③ Escrever página de exceção
④ Testar salto de exceção
① Crie uma classe de manipulador de exceção para implementar HandlerExceptionResolver
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
//处理异常的代码实现
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("exceptionPage");
return modelAndView;
} }
② Configure o manipulador de exceção
<bean id="exceptionResolver"
class="com.itheima.exception.MyExceptionResolver"/>
③ Escreva uma página de exceção
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html> <head><title>Title</title>
</head> <body>
这是一个最终异常的显示页面
</body>
</html>
④ Salto de exceção de teste
@RequestMapping("/quick22")
@ResponseBody
public void quickMethod22() throws IOException, ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
simpleDateFormat.parse("abcde");
}