SpringMVC的异常处理和REST风格的实例应用(十三)中

三. 实现 HandlerExceptionResolver 接口,构建全局异常处理器


保留上面写的那些异常类和后端。


三.一 构建全局异常处理器 MyExceptoinResolver


在 com.yjl.resolver 包里面。



public class MyExceptoinResolver implements HandlerExceptionResolver{
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object object, Exception exception) {
        ModelAndView mv=new ModelAndView();
        mv.addObject("ex",exception);
        //2. 设置默认页面
        mv.setViewName("errors/default");
        //3. 根据异常的类型的所属类,来进行返回不同的提示信息,要取出提示语句。
        String message="";
        if(exception instanceof InputException){
            mv.setViewName("errors/inputError");
            InputException exc=(InputException)exception;
            message=exc.getMessage();
        }else if(exception instanceof DataException){
            mv.setViewName("errors/dataError");
            DataException exc=(DataException)exception;
            message=exc.getMessage();
        }else{
            message="未知错误";
        }
        mv.addObject("message",message);
        return mv;
    }
}


三.二 后端和前端的那几个.jsp 页面保持不变


三.三 springmvc.xml 中配置 全局异常处理器


<mvc:annotation-driven></mvc:annotation-driven>
<bean class="com.yjl.resolver.MyExceptoinResolver"></bean>


三.四 重启服务器,进行验证


与 二.七 显示的结果一样。


上面同样也会跳转,可以自己进行定义,设置信息。 但一般,并不是返回ModelAndView, 而是返回json数据。


三.五 返回JSON 数据


重写 MyExceptoinResolver 里面的 HandlerExceptionResolver 接口里面的方法,采用json返回的形式。


用的是fastjson.jar , 关于json的内容,可以看老蝴蝶前面写的json文章。


    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object object, Exception exception) {
        //有时候,会返回一个JSON字符串。
        
        Map<String,Object> errorMap=new HashMap<String,Object>();
        
        //System.out.println("输出值:"+exception.getClass().getSuperclass().getSimpleName());
        errorMap.put("request_state",false);
        errorMap.put("error_code","500");
        errorMap.put("error_exception",exception.getClass().getSimpleName());   
        try {
            Method method=exception.getClass().getMethod("getMessage");
            errorMap.put("message",method.invoke(exception));
            //json 形式的打印响应
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter write=response.getWriter();
            write.write(JSON.toJSONString(errorMap));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


三.六 重启服务器,进行验证


会在页面上打印相应的json数据,即响应 json 字符串。


SpringMVC的异常处理和REST风格的实例应用(十三)中


SpringMVC的异常处理和REST风格的实例应用(十三)中


SpringMVC的异常处理和REST风格的实例应用(十三)中


这就是 SpringMVC的异常的简单的功能。


四. REST


REST 全称是 Representational State Transfer,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。


它进行了三个层面的划分。


1 . 对url 进行规范,要写rest 风格的url


如登录时,以前的url 是: http://localhost:8027/SpringMVC08/user/login.action?name=两个蝴蝶飞&password=1234,

那么写成 url 的风格 便是: http://localhost:8027/SpringMVC08/user/login/两个蝴蝶飞/1234


注意,没有.action


url简洁了, 直接将参数 通过url 传递到了后端。

后端接收参数时,要注意顺序性的接收。


2 . 对http 方法进行规范。


以前HTTP 的方法,常用的是 get 和post, 而get 和post 也没有进行任何区分, 通过在 get 中直接调用 toPost(), 或者是在post 中直接调用 toGet() 方法,

REST 风格,对http 方法进行了扩展。


对数据库的操作 通常是 CRUD, 前端对后端的操作也是 CRUD, 添加,读取,更新,删除。


POST方式, 为插入

GET 方法, 为 查询

PUT 方法, 为 更新

DELETE 方法, 为删除。


3 . 对HTTP 的contentType 文档类型进行了规范。


设置成 json 的格式。


由于 url为REST 风格的,不能在方法中出现 .action,所以需要将 web.xml 中的 DispatcherServlet 地址映射改一下。


以前 url-pattern 为 *.action, 现在改成 /


<!-- 过滤器 -->
  <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
  </servlet-mapping>


改成了 / 之后,对静态的资源路径也进行了解析, 此时访问 jquery.js 的,是访问不出来的, 将将其当成方法进行处理。 所以,要在springmvc.xml 配置静态资源路径。


<!--静态资源处理-->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/image/" mapping="/image/**"></mvc:resources>


一般,设置这三个, js,css和image .

上一篇:前端工程师的mysql笔记


下一篇:Mysql 视图笔记2