velocity模板引擎学习(3)-异常处理
时间:2022-04-23
本文章向大家介绍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 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python3.7调试的实例方法
- Laravel框架控制器,视图及模型操作图文详解
- PHP实现带进度条的Ajax文件上传功能示例
- 基于selenium及python实现下拉选项定位select
- PHP rmdir()函数的用法总结
- thinkphp5修改view到根目录实例方法
- openCV提取图像中的矩形区域
- PHP二维索引数组的遍历实例分析【2种方式】
- Selenium及python实现滚动操作多种方法
- PHP使用JPGRAPH制作圆柱图的方法详解
- PHP 实现超简单的SESSION与COOKIE登录验证功能示例
- PHP 图像处理与SESSION制作超简单验证码的方法示例
- 简述PHP7.4 新特性和废弃的功能
- laravel5.1框架下的批量赋值实现方法分析
- Laravel框架环境与配置操作实例分析