web.xml中 error-page的正确用法

简介:

最近在review别的team的代码,发现error-page没有被用的很好。


他们的web.xml中关于error-page的定义如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--errorpage handler -->
         < error-page >
             < error-code >404</ error-code >
             < location >/WEB-INF/jsp/errors/error.jsp</ location >
         </ error-page >
         < error-page >
             < error-code >500</ error-code >
             < location >/WEB-INF/jsp/errors/error.jsp</ location >
         </ error-page >
         < error-page >
             < error-code >414</ error-code >
             < location >/WEB-INF/jsp/errors/error.jsp</ location >
         </ error-page >
         < error-page >
             < error-code >505</ error-code >
             < location >/WEB-INF/jsp/errors/error.jsp</ location >
         </ error-page >
         < error-page >
             < error-code >400</ error-code >
             < location >/WEB-INF/jsp/errors/error.jsp</ location >
         </ error-page >


看样子貌似几乎所有常见的服务器端的异常都被覆盖到了,出现这些异常的话页面会到error.jsp中。


但是这样就够了吗, 显然是不够的,仔细阅读他们代码,会发现他们有很多异常都有可能被抛出来而没有得到非常妥当的处理。


比如说他们的CheckoutAddress类的fromHomeAddress()方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  static  CheckOutAddress fromHomeAddress(HomeAddr homeAddr) {
         CheckOutAddress address =  new  CheckOutAddress();
         address.setAddressId(String.valueOf(homeAddr.getId()));
         address.setCountryId(String.valueOf(homeAddr.getCountry().getId()));
         address.setCountryName(homeAddr.getCountry().getRegionName());
         address.setDetailAddress(homeAddr.getDetailAddress());
         address.setFirstName(homeAddr.getFirstName());
         address.setLastName(homeAddr.getLastName());
         address.setIsDefaultAddress(String.valueOf(homeAddr.getIsDefault()));
         address.setMobilePhone(homeAddr.getMobilePhone());
         address.setCountryPhoneCode(homeAddr.getCountryPhoneCode());
         address.setZipCode(homeAddr.getZipCode());
         return  address;
     }


显然这个方法是没有正确处理异常的,因为传入的homeAddr入参可能为空,如果这样的话,那么所有点操作符都会抛NullPointerException,而这里显然没有对入参进行控制,而且代码中也没有对异常进行处理,我查看了下,所有调用这个方法的方法也都没有对异常进行处理。所以如果假设真正应用上线后遇到了一个homeAddr为空的地方,那么这段代码就会抛异常而不会继续走下去,没有好好处理的结果可能是灾难性的,前端用户会面对一大段异常文本而不知所措。



当然了,这段代码最好的方案还是对入参进行严格控制,并且在代码中吧异常直接处理掉,所谓“能自己处理就不要丢给上级” ,当然了,我们为了以防万一,还是必须在web.xml中定义一个 error-page选项,来把好最后一关,也就是就算真正出这个异常了,也会到出错页面,而不是一个无法控制的页面。


所以我们需要在web.xml中增加一个error-page 元素,如下:

1
2
3
4
< error-page >
    < exception-type >java.lang.NullPointerException</ exception-type >
    < location >/WEB-INF/jsp/errors/error.jsp</ location >
</ error-page >

这样应用就更加robust了。  






本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1338856,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
XML 存储 JavaScript
XML 简介及用法详解
XML代表eXtensible Markup Language(可扩展标记语言)。XML是一种与HTML非常相似的标记语言。XML被设计用于存储和传输数据。XML被设计成具有自我描述性。XML不执行任何操作,也许有点难理解,但XML不执行任何操作
137 5
|
6月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
88 0
|
2月前
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
172 4
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
19天前
|
XML 存储 数据库
xml用法
【10月更文挑战第17天】xml用法
16 7
|
2月前
|
数据采集 存储 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
在现代Web开发中,数据采集尤为重要,尤其在财经领域。本文以“东财股吧”为例,介绍如何使用Puppeteer结合代理IP技术进行高效的数据抓取。Puppeteer是一个强大的Node.js库,支持无头浏览器操作,适用于复杂的数据采集任务。通过设置代理IP、User-Agent及Cookies,可显著提升抓取成功率与效率,并以示例代码展示具体实现过程,为数据分析提供有力支持。
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
1月前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
15 0
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
移动开发 数据挖掘 API
HTML5 中 Web Workers API 的用法
【8月更文挑战第24天】
47 0
|
6月前
|
前端开发
【Web前端】CSS基本语法规范和引入方式&&常见选择器用法&&常见元素属性
【Web前端】CSS基本语法规范和引入方式&&常见选择器用法&&常见元素属性
|
6月前
|
Web App开发 前端开发 测试技术
Web应用程序测试工具Selenium用法详解
Web应用程序测试工具Selenium用法详解
120 0
下一篇
无影云桌面