上回继续,前面写过一篇Spring MVC下的异常处理、及Spring MVC下的ajax异常处理,今天看下换成velocity模板引擎后,如何处理异常页面:

一、404错误、500错误

  1. <error-page>
  2. <error-code>404</error-code>
  3. <location>/nopage.do</location>
  4. </error-page>
  5.  
  6. <error-page>
  7. <error-code>500</error-code>
  8. <location>/error.do</location>
  9. </error-page>

web.xml中添加这二项,注意locatoion节点,不再是指定成物理文件路径,而是Spring MVC中Controller里具体方法映射的URI

  1. @RequestMapping(value = "/nopage.do", method = RequestMethod.GET)
  2. public String pageNotFound(Locale locale, Model model) throws Exception {
  3. return "errors/404";
  4. }
  5.  
  6. @RequestMapping(value = "/error.do", method = RequestMethod.GET)
  7. public String innerError(Locale locale, Model model) throws Exception {
  8. return "errors/500";
  9. }

上面是Controller的处理

二、常规异常的处理

Controller里的处理还是跟以前一样,关键是errors/error.vm这个模板文件如何写:

  1. <!doctype html>
  2. <html>
  3. <head>
  4. #parse("comm/header.vm")
  5. #set($ex=$request.getAttribute("ex"))
  6. <title>ERROR</title>
  7. </head>
  8. <body style="margin:20px">
  9. <H2>
  10. 错误:$ex.class.simpleName
  11. </H2>
  12. <hr/>
  13. <P>
  14. <strong>错误描述:</strong>$ex.message
  15. </P>
  16.  
  17. <P>
  18. <strong>详细信息:</strong>
  19. </P>
  20. <pre>
  21. #foreach($stack in $ex.getStackTrace())
  22. $stack.toString()
  23. #end
  24. </pre>
  25. </body>
  26. </html>

注意:5、10、21-23这几行

三、ajax异常的处理

这里要在BaseController里直接返回json字符串,参考下面的代码:

  1. @ExceptionHandler
  2. public String exp(HttpServletRequest request, HttpServletResponse response, Exception ex) throws Exception {
  3. String resultViewName = "errors/error";
  4.  
  5. // 记录日志
  6. logger.error(ex.getMessage(), ex);
  7.  
  8. // 根据不同错误转向不同页面
  9. if (ex instanceof BusinessException) {
  10. resultViewName = "errors/biz-error";
  11. } else {
  12. // 异常转换
  13. //ex = new Exception("服务器忙,请稍候重试!");
  14. }
  15.  
  16. String xRequestedWith = request.getHeader("X-Requested-With");
  17. if (!StringUtils.isEmpty(xRequestedWith)) {
  18. // ajax请求
  19. ResponseUtil.OutputJson(response, "{\"error\":\"" + ex.getClass().getSimpleName() + "\",\"detail\":\"" + ex.getMessage() + "\"}");
  20. }
  21. request.setAttribute("ex", ex);
  22. return resultViewName;
  23. }

关键点有2个,方法签名里增加HttpServletResponse response,然后19行,直接输出Json字符串,其中用到了一个ResponseUtil类,该类的主要代码如下:

  1. public static void OutputContent(HttpServletResponse response,
  2. String contentType, String content) throws IOException {
  3. response.setContentType(contentType + ";charset=utf-8");
  4. response.setCharacterEncoding("UTF-8");
  5. PrintWriter out = response.getWriter();
  6. out.println(content);
  7. out.flush();
  8. out.close();
  9. }
  10.  
  11. public static void OutputJson(HttpServletResponse response, String content)
  12. throws IOException {
  13. OutputContent(response, "application/json", content);
  14. }

velocity模板引擎学习(3)-异常处理的更多相关文章

  1. velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools

    通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用ve ...

  2. velocity模板引擎学习(1)

    velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,(注:castle团队在gith ...

  3. velocity模板引擎学习(2)-velocity tools 2.0

    使用velocity后,原来的很多标签无法使用了,必须借助velocity tools来完成,目前velocity tools最新版本是2.0,下面是velocity tools的一些注意事项: 1. ...

  4. 使用 Velocity 模板引擎快速生成代码(zhuan)

    http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ ****************************************** ...

  5. 使用Velocity 模板引擎快速生成代码

    Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的MVC架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高. ...

  6. Velocity模板引擎语法

    Velocity 模板引擎介绍 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java ...

  7. Velocity模板引擎入门

    类似于PHP中的Smarty,Velocity是一个基于Java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代 ...

  8. 【转载】Velocity模板引擎的介绍和基本的模板语言语法使用

    原文地址http://www.itzhai.com/the-introduction-of-the-velocity-template-engine-template-language-syntax- ...

  9. 转 如何使用velocity模板引擎开发网站

    基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...

随机推荐

  1. 结对编程-地铁续(有种上个学期OO的既视感)

    我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...

  2. WPF学习之路(十三)URL

    URL一般由三个部分组成,协议.资源所在主机地址.资源路径 WPF中URL同样有三部分组成:pack.authority(application:| siteoforigin:).路径 资源文件 本地 ...

  3. input的file 控件及美化

    在一些网站进行上传时,当单击了“浏览”按钮之后会弹出[选择文件]的对话框.想要实现这一功能,用input的file控件来实现就好啦~ <!doctype html> <html la ...

  4. Ubuntu/Windows双系统修复引导

    Ubuntu/Windows双系统修复引导   首先说明:在Windows存在的前提下安装Ubuntu(或者Ubuntu系列)是不需要修复引导的.因为grub会自动搜索存在硬盘中的系统.   而在Ub ...

  5. 修改Mac系统的默认截图保存路径到指定目录

    注:此文仅针对mac系统如果你是mac用户,会发现桌面经常一团糟,桌面到处都是平时的截图(mac系统的截图是command+shift+3 和 command+shift+4 两个快捷命令) 之前一直 ...

  6. eclipse配置文件导出问题

    关于eclipse配置文件导出问题 eclipse的默认配置一般不能满足我们的要求,我们一般会修改一些配置,如字体.背景颜色.快捷键及一些template等等,这样方便我们的开发.可是当我们新建一个工 ...

  7. phonegap学习笔记

    [windows下安装] 1 先安装node.js: http://nodejs.org/ 2 CMD下运行: C:\> npm install -g phonegap [创建项目] CMD下运 ...

  8. 创建一个Point类,有成员变量x,y,方法getX(),setX(),还有一个构造方 法初始化x和y。创建类主类A来测试它

    package com.hanqi.test; public class Point { private int x; private int y; Point(int xx,int yy) { x= ...

  9. FFMPEG ./configure 参数及意义

    FFMPEG版本:2.6.2,编译环境:ubuntu 14.4. 不同版本的FFMPEG参数可能不同,可在FFMPEG目录下使用以下命令查看 ./configure --help --help pri ...

  10. sql server 2005导出数据到oracle

    一. 在sql server下处理需要导出的数据库 1. 执行以下sql,查出所有'float'类型的字段名,手动将float类型改为decimal(18,4). select 表名=d.name,字 ...