velocity模板引擎学习(3)-异常处理

时间:2021-07-30 07:19:54

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

一、404错误、500错误

     <error-page>
<error-code>404</error-code>
<location>/nopage.do</location>
</error-page> <error-page>
<error-code>500</error-code>
<location>/error.do</location>
</error-page>

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

     @RequestMapping(value = "/nopage.do", method = RequestMethod.GET)
public String pageNotFound(Locale locale, Model model) throws Exception {
return "errors/404";
} @RequestMapping(value = "/error.do", method = RequestMethod.GET)
public String innerError(Locale locale, Model model) throws Exception {
return "errors/500";
}

上面是Controller的处理

二、常规异常的处理

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

 <!doctype html>
<html>
<head>
#parse("comm/header.vm")
#set($ex=$request.getAttribute("ex"))
<title>ERROR</title>
</head>
<body style="margin:20px">
<H2>
错误:$ex.class.simpleName
</H2>
<hr/>
<P>
<strong>错误描述:</strong>$ex.message
</P> <P>
<strong>详细信息:</strong>
</P>
<pre>
#foreach($stack in $ex.getStackTrace())
$stack.toString()
#end
</pre>
</body>
</html>

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

三、ajax异常的处理

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

    @ExceptionHandler
public String exp(HttpServletRequest request, HttpServletResponse response, Exception ex) throws Exception {
String resultViewName = "errors/error"; // 记录日志
logger.error(ex.getMessage(), ex); // 根据不同错误转向不同页面
if (ex instanceof BusinessException) {
resultViewName = "errors/biz-error";
} else {
// 异常转换
//ex = new Exception("服务器忙,请稍候重试!");
} String xRequestedWith = request.getHeader("X-Requested-With");
if (!StringUtils.isEmpty(xRequestedWith)) {
// ajax请求
ResponseUtil.OutputJson(response, "{\"error\":\"" + ex.getClass().getSimpleName() + "\",\"detail\":\"" + ex.getMessage() + "\"}");
}
request.setAttribute("ex", ex);
return resultViewName;
}

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

     public static void OutputContent(HttpServletResponse response,
String contentType, String content) throws IOException {
response.setContentType(contentType + ";charset=utf-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(content);
out.flush();
out.close();
} public static void OutputJson(HttpServletResponse response, String content)
throws IOException {
OutputContent(response, "application/json", content);
}

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

  1. velocity模板引擎学习&lpar;4&rpar;-在standalone的java application中使用velocity及velocity-tools

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

  2. velocity模板引擎学习&lpar;1&rpar;

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

  3. velocity模板引擎学习&lpar;2&rpar;-velocity tools 2&period;0

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

  4. 使用 Velocity 模板引擎快速生成代码&lpar;zhuan&rpar;

    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. WampServer下修改和重置MySQL密码&lpar;转&rpar;

    转自:www.2cto.com/database/201504/387589.html WampServer安装后密码是空的, 修改一般有两种方式: 一是通过phpMyAdmin直接修改: 二是使用W ...

  2. C&plus;&plus;暂时对象

    C++真正所谓的暂时对象是不可见的--不会在你的源码中出现.仅仅要你产生一个non-heap object而没有为它命名,便诞生了一个暂时对象.此等匿名对象通常发生于两种情况: 一是当隐式类型转换(i ...

  3. WebView无法放大缩小解决方式

    先看看我们之前所写的代码 1) 加入权限:AndroidManifest.xml中必须使用了许可"android.permission.INTERNET" 2) 使用了一个WebV ...

  4. jQuery常用及基础知识总结&lpar;二&rpar;

    JQuery Effects 方法说明 show( ) 显示隐藏的匹配元素.show( speed, [callback] ) 以优雅的动画显示所有匹配的元素,并在显示完成后可选地触发一个回调函数.h ...

  5. &period;Net EntityFramwork6&period;0 EF框架开发入门

    一.环境 开发环境:Sqlserver2008 R2.Visual Studio2012   二.准备工作 1.新建MVC空项目 2.通过NuGet获取 EntityFramework 包  操作截图 ...

  6. sun&period;misc jar包

    一直以来Base64算法的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder来进行的.但是这个类是sun公司的内部方法,并没有在Java API中公开过,不属 ...

  7. BZOJ 1497&colon; &lbrack;NOI2006&rsqb;最大获利(最大权闭合图)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1497 题意: 思路: 论文题,只要看过论文的话就是小菜一碟啦~ 每个用户群i作为一个结点分别向相应的 ...

  8. 2-5 re模块练习题

    1 练习: 1.验证手机号是否合法 2.验证邮箱是否合法 3.开发一个简单的python计算器,实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2 ...

  9. 中文乱码—Servlet—SpringMVC

    一.SpringMVC中的中文乱码问题 a:处理全局请求的中文乱码(配置Web.xml的字符编码过滤器) <filter> <filter-name>encodingFilte ...

  10. 数据分析之可反复与独立样本的T-Test分析

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jia20003/article/details/24201297 数据分析之独立样本的T-Test分 ...