异常的处理
    1.自定义一个异常类MyException,将所有异常都统一捕获,变成唯一的异常,交给小总管
    2.自定义一个异常处理类(处理异常 做转发 响应)
    3.需要做一个配置,告知Spring帮我们将自定义的异常处理类管理起来
    MyException

    1. package exception;
    2. /**
    3. * 他是一个普通自定义异常
    4. */
    5. public class MyException extends RuntimeException {
    6. private String message;
    7. public MyException(){}
    8. public MyException(String message){
    9. this.message = message;
    10. }
    11. @Override
    12. public String getMessage() {
    13. return message;
    14. }
    15. public void setMessage(String message) {
    16. this.message = message;
    17. }
    18. }

    ExceptionResolver

    1. package exception;
    2. import org.springframework.stereotype.Component;
    3. import org.springframework.web.servlet.HandlerExceptionResolver;
    4. import org.springframework.web.servlet.ModelAndView;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. /**
    8. * 这是一个自定义的异常处理类
    9. * 原来的小总管不会帮我们处理
    10. * 我们自己写类 自己定义处理规则
    11. * 将这个类交个Spring管理
    12. */
    13. @Component()
    14. public class ExceptionResolver implements HandlerExceptionResolver {
    15. @Override
    16. public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    17. if(e instanceof MyException){
    18. ModelAndView modelAndView=new ModelAndView();
    19. modelAndView.addObject("errorMessage",e.getMessage());
    20. modelAndView.setViewName("error.jsp");
    21. return modelAndView;
    22. }
    23. return null;
    24. }
    25. }

    TestController

    1. package controller;
    2. import exception.MyException;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.web.bind.annotation.RequestMapping;
    6. import org.springframework.web.bind.annotation.SessionAttributes;
    7. import org.springframework.web.servlet.ModelAndView;
    8. import service.UserService;
    9. /**
    10. * 分析现在有了框架之后的控制层
    11. *
    12. * 原来 现在
    13. * 继承HttpServlet 没有继承关系
    14. * 重写方法service/doXXX 方法随便写
    15. * 方法内有两个参数 req resp 参数随便 普通变量 String int 对象变量 User 集合Map(RequestParam) 原生 req resp
    16. * 方法还有两个异常 IO Servlet 没有异常抛出
    17. * 方法返回值void 自己给响应 方法返回值void String(转发/重定向) 对象domain Map List(@ResponseBody)
    18. *
    19. * 耦合度几乎没有啦
    20. * 所以在服务端想要带走一些数据 也不用原来的方式
    21. * request.setAttribute 框架提供好的对象ModelAndView
    22. * 普通的Map(接收参数--@RequestParam 带走信息--@ResponseBody)
    23. * Model
    24. * ModelMap
    25. * ModelAndView
    26. */
    27. @SessionAttributes("username")
    28. @Controller
    29. public class TestController {
    30. @RequestMapping("testException.do")
    31. public String testException(){
    32. try{
    33. String s=null;
    34. s.length();
    35. }catch (Exception e){
    36. throw new MyException("出异常了!我自己弄出来测试的!");
    37. }
    38. return "welcome.jsp";
    39. }
    40. }