velocity模板引擎学习(3)-异常处理
按上回继续,前面写过一篇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)-异常处理的更多相关文章
- velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools
通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用ve ...
- velocity模板引擎学习(1)
velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,(注:castle团队在gith ...
- velocity模板引擎学习(2)-velocity tools 2.0
使用velocity后,原来的很多标签无法使用了,必须借助velocity tools来完成,目前velocity tools最新版本是2.0,下面是velocity tools的一些注意事项: 1. ...
- 使用 Velocity 模板引擎快速生成代码(zhuan)
http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ ****************************************** ...
- 使用Velocity 模板引擎快速生成代码
Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的MVC架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高. ...
- Velocity模板引擎语法
Velocity 模板引擎介绍 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java ...
- Velocity模板引擎入门
类似于PHP中的Smarty,Velocity是一个基于Java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代 ...
- 【转载】Velocity模板引擎的介绍和基本的模板语言语法使用
原文地址http://www.itzhai.com/the-introduction-of-the-velocity-template-engine-template-language-syntax- ...
- 转 如何使用velocity模板引擎开发网站
基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI( ...
随机推荐
- HTML基础(一)——一般标签、常用标签和表格
第一部分 HTML <html> --开始标签 <head> 网页上的控制信息 <title>页面标题</title> </head> ...
- Sql Server之旅——第七站 为什么都说状态少的字段不能建索引
我们在学sqlserver的时候,大多教科书和前辈们都说状态少的字段不要建索引,由此带来的开销还不如不建索引,但是这句话有多少人真的知道, 或者说有多少人真的对此有比较深刻的理解,而不是听别人道听途说 ...
- 《java jdk7学习笔记》之java三大平台
Sun公司在2006年底,就将三大平台正名为java SE.java EE和java ME.也有很多人习惯用J2SE.J2EE和J2ME. 1.java SE java SE(标准版)是各应用平台的基 ...
- C#正则表达式开源工具,为.net开源绵尽薄力
先交代一下背景,最近工作中经常用到正则表达式,而正则表达式这个东西我个人觉得很鸡肋,不用吧,有些功能实现起来会很麻烦.用吧,又不是说工作中经常用到,只是有时候有些需要求用到而已.但是正则表达式只要一段 ...
- MySQL 命令行工具之 mysqldump 深入研究
mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的 ...
- SQL Server 2008 R2——分组取前几名
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- English -有感过四六级后的托福单词表-附下载
好像自从上学期不高不低过了六级之后就没怎么持续接触英语的东西了,欧,除了要debug的时候遇到问题了,去Google到了再用那些仅有的英语知识去看别人的文章.可能是因为看到的都是自己平时接触过的方面的 ...
- Linux IPC udp/ip socket 编程
模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include < ...
- finereport与OA系统集成的完全方案
随着社会信息化高速发展,企业信息化也得到了一定提高,而如何提高办公效率已经成为企业一项重要而紧迫的任务,传统的纸质报表等档案不仅浪费纸张.不易存档.不易调阅.不易统计,如何更有效.更快速提升办公效率和 ...
- 编写NPAPI plugin的命名问题
最近写了个NPAPI的插件,在chrome上用得好好的,结果在火狐上死活不认我的插件,找了N多资料最后在官方的说明里才找到说火狐浏览器的插件的文件名必须是以np开头的,立刻吐血三升,难怪被chrome ...