66 views

正确使用web.xml中的错误页

By | 2019年8月8日

最近对其他团队代码的审查发现错误页面的使用不太好。

他们的web.xml中关于error-page的定义如下:
<!–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>

看起来几乎所有常见的服务器端异常都被覆盖了,页面将出错。如果发生这些异常,则为JSP。

但这就够了吗?显然,这还不够。如果仔细阅读他们的代码,您会发现他们的许多异常可能会被抛出,而没有得到正确的处理。

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

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中定义一个错误页选项,以防最终通过。这就是全部。即使异常是真实的,它也会进入错误的页面,而不是无法控制的页面。

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

<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/WEB-INF/jsp/errors/error.jsp</location>
</error-page>
这样应用就更加robust了。

本文编辑于2019年08月8日,属于云漫网络原创内容,由特约作者(CDN行业资深从事人)首发在win-man.com,云漫网络每日更新发布行业原创内容,转载请注明出处。否则属侵权行为一定追究责任。

本文转载于:http://win-man.com
本文关键词:高防CDN ddos攻击 高防行业 CDN行业
作者:CDN行业资深从事人

发表评论

电子邮件地址不会被公开。 必填项已用*标注