- SpringMVC-学习笔记01【SpringMVC概述及入门案例】【day01】
- SpringMVC-学习笔记02【参数绑定及自定义类型转换】
- SpringMVC-学习笔记03【SpringMVC常用注解】
- SpringMVC-学习笔记04【SpringMVC返回值类型及响应数据类型】【day02】
- SpringMVC-学习笔记05【文件上传】
- SpringMVC-学习笔记06【异常处理及拦截器】
- SpringMVC-学习笔记07【SSM整合案例】【day03】
目录
03-03、SysExceptionResolver.java
01-SpringMVC异常处理之分析和搭建环境
02-SpringMVC异常处理之演示程序异常
03-SpringMVC异常处理之异常处理代码编写
03-01、UserController.java
package cn.itcast.controller;
import cn.itcast.exception.SysException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testException")
public String testException() throws SysException {
System.out.println("testException执行了...");
try {
//模拟异常
int a = 10 / 0;
} catch (Exception e) {
//打印异常信息
e.printStackTrace();
//抛出自定义异常信息
throw new SysException("查询所有用户出现错误了...");
}
return "success";
}
}
03-02、SysException.java
package cn.itcast.exception;
/**
* 自定义异常类
*/
public class SysException extends Exception{
private String message;//存储提示信息的
public SysException(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
03-03、SysExceptionResolver.java
package cn.itcast.exception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 异常处理器
*/
public class SysExceptionResolver implements HandlerExceptionResolver {
/**
* 处理异常的业务逻辑
*
* @param request
* @param response
* @param handler
* @param ex
* @return
*/
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
//获取到异常对象
SysException e = null;
if (ex instanceof SysException) {//判断ex是否为SysException类型的异常
e = (SysException) ex;//强制转换
} else {
e = new SysException("系统正在维护...");
}
//创建ModelAndView对象
ModelAndView mv = new ModelAndView();
mv.addObject("errorMsg", e.getMessage());
mv.setViewName("error");
return mv;
}
}
04-SpringMVC拦截器之介绍和搭建环境
05-SpringMVC拦截器之编写controller
06-SpringMVC拦截器之拦截器入门代码
07-SpringMVC拦截器之拦截器接口方法演示
07-01、MyInterceptor1.java
package cn.itcast.controller.cn.itcast.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器
*/
public class MyInterceptor1 implements HandlerInterceptor {
/**
* 预处理,controller方法执行前
* return true:放行,执行下一个拦截器,如果没有,执行controller中的方法
* return false:不放行
*
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor1执行了...前1111");
// request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
return true;
}
/**
* 后处理方法,controller方法执行后,success.jsp执行之前
*
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor1执行了...后1111");
// request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
}
/**
* success.jsp页面执行后,该方法会执行
*
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor1执行了...最后1111");
}
}
07-02、UserController.java
package cn.itcast.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testInterceptor")
public String testInterceptor() {
System.out.println("testInterceptor执行了...");
return "success";
}
}
07-03、springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="cn.itcast"/>
<!-- 视图解析器对象 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--前端控制器,哪些静态资源不拦截-->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<!--配置拦截器-->
<mvc:interceptors>
<!--配置拦截器-->
<mvc:interceptor>
<!--要拦截的具体的方法-->
<mvc:mapping path="/user/*"/>
<!--不要拦截的方法
<mvc:exclude-mapping path=""/>
-->
<!--配置拦截器对象-->
<bean class="cn.itcast.controller.cn.itcast.interceptor.MyInterceptor1"/>
</mvc:interceptor>
<!--配置第二个拦截器-->
<mvc:interceptor>
<!--要拦截的具体的方法-->
<mvc:mapping path="/**"/>
<!--不要拦截的方法
<mvc:exclude-mapping path=""/>
-->
<!--配置拦截器对象-->
<bean class="cn.itcast.controller.cn.itcast.interceptor.MyInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- 开启SpringMVC框架注解的支持 -->
<mvc:annotation-driven/>
</beans>
随堂笔记
第三章:SpringMVC的异常处理
1.异常处理思路
- 1.Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。
2.SpringMVC的异常处理
- 1.自定义异常类
- 2.自定义异常处理器
- 3.配置异常处理器
第四章:SpringMVC框架中的拦截器
1.拦截器的概述
- 1.SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。
- 2.可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。
- 3.拦截器和过滤器的功能比较类似,有区别。
- 1.过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。
- 2.拦截器是SpringMVC框架独有的。
- 3.过滤器配置了/*,可以拦截任何资源。
- 4.拦截器只会对控制器中的方法进行拦截。
- 4.拦截器也是AOP思想的一种实现方式。
- 5.想要自定义拦截器,需要实现HandlerInterceptor接口。
2.自定义拦截器步骤
- 1.创建类,实现HandlerInterceptor接口,重写需要的方法。
- 2.在springmvc.xml中配置拦截器类。
3.HandlerInterceptor接口中的方法
- 1.preHandle方法是controller方法执行前拦截的方法。
- 1.可以使用request或者response跳转到指定的页面。
- 2.return true放行,执行下一个拦截器,如果没有拦截器,执行controller中的方法。
- 3.return false不放行,不会执行controller中的方法。
- 2. postHandle是controller方法执行后执行的方法,在JSP视图执行前。
- 1.可以使用request或者response跳转到指定的页面。
- 2.如果指定了跳转的页面,那么controller方法跳转的页面将不会显示。
- 3. postHandle方法是在JSP执行后执行。
- 1. request或者response不能再跳转页面了。
4.配置多个拦截器
- 1.再编写一个拦截器的类
- 2.配置2个拦截器