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

上回继续,前面写过一篇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     }
时间: 2024-08-04 23:08:43

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

velocity模板引擎学习(1)

velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,(注:castle团队在github上也维护了一个版本)对于使用异构技术的团队(即要搞.NET又要搞JAVA),总是希望找一种通用的技术,兼容所有技术平台,以便降低学习成本,无疑velocity是一种值得考虑的选择. 一.与strtus2的集成 1 <dependency> 2 <groupId>org.apache

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

使用velocity后,原来的很多标签无法使用了,必须借助velocity tools来完成,目前velocity tools最新版本是2.0,下面是velocity tools的一些注意事项: 1. 与Spring MVC 3.x/4.x的集成问题 Spring 3.x/4.x只支持1.3.x的velocity tools,要使用2.0必须自己扩展VelocityToolboxView类 1 package org.springframework.web.servlet.view.veloci

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

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/ Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点.但是在实际应用过程中,Velocity 又不仅仅被用在了 MVC 的架构中. Velocity 模板引擎介绍 在现今的软

改造Velocity模板引擎让$[!]{}输出默认进行html转义,并增加$#{}语法支持不转义输出

一直以来在项目中使用Apache Velocity模板引擎作为视图层输出,为了解决XSS漏洞,需要对输出到页面的内容进行HTML转义,我一般采用2种方式实现: 使用过滤器 Filter,在其中进行 HttpServletRequestWrapper 的 getParameter( )等方法重载,在底层进行HTML转义,然后页面直接输出: 这种方式很轻松很直接,业务代码不需要修改就完成了所有的转义工作:但是也带来了问题:修改了用户的原始输入数据,如果需要用到用户的原始输入数据,又得反转义回去,很麻

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

基于 Java 的网站开发,很多人都采用 JSP 作为前端网页制作的技术,尤其在是国内.这种技术通常有一些问题,我试想一下我们是怎样开发网站的,通常有几种方法: 1:功能确定后,由美工设计网页的UI(界面)部分,然后由程序员在其上加入代码显示逻辑(比如循环,判断显示数据结果).也就是通常的 jsp 页面制作,当然这部分可以由美工完成模板,然后由 jsp 工程师再继续以它为原型创建相应的 jsp 页面. 2:功能确定后,由美工设计网页的UI(界面)部分,然后由网页制作人员在其上加入代码显示逻辑(比

artTemplate模板引擎学习实战

在我的一篇关于智能搜索框异步加载数据的文章中,有博友给我留言,认为我手写字符串拼接效率过低,容易出错.在经过一段时间的摸索和学习之后,发现现在拼接字符串的方法都不在是自己去书写了,而是使用Javascript引擎.而javascript引擎的实质就是帮我们把带有JavaScript代码的伪THTML语句编译为HTML. 如果有不了解的朋友,可以前往这两篇文章: 淘宝购物车页面 PC端和移动端实战 淘宝购物车页面 智能搜索框Ajax异步加载数据 源码地址: GitHub:Uncle-Keith 回

[JavaWeb基础] 019.Velocity 模板引擎简单示例

1.什么是Velocity 一种J2EE的前端模版技术,和JSP,Freemarker差不多,都是用来展示网页内容的.和JSP不同的是velocity只能显示Action中的数据,不能处理数据.不能写java代码,但是可以使用Velocity标记.也就是说把显示代码和后端的JAVA代码分离开来,降低程序的耦合性 2.需要引入哪些Jar包 velocity-1.5.jar,velocity-1.6.2.jar,velocity-tools-2.0.jar,velocity-tools-generi

Velocity模板引擎的简单使用

一 简介 Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点. 二 一个简单示例 (1)从官网下载最新的jar包,然后新建一个普通的Java工程,然后导入下载下来的zip文件中的jar包.当然也可以使用我用过的jar包,链接:http://pan.baidu.com/s/1PXu5g (2)新建一

JavaScript模板引擎学习分享

为了将数据库中的一组记录转换成HTML输出到界面上,大家都采用哪些做法呢? 在WebForm时代我们经常使用datagrid.repeater,当MVC问世后我们开始直接在视图上编写C#循环语句,而现在我更喜欢使用JavaScript模板引擎来生成HTML.因为这种做法的最大好处是实现了前后端代码的解耦,前端开发人员也无需了解太多的C#知识. 用法与示例: 第一步,在页面中引入JavaScript模板引擎: function template(str, data) { var strFunc =