阅读 196

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

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


他们的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>


看样子貌似几乎所有常见的服务器端的异常都被覆盖到了,出现这些异常的话页面会到error.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中定义一个 error-page选项,来把好最后一关,也就是就算真正出这个异常了,也会到出错页面,而不是一个无法控制的页面。


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

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

这样应用就更加robust了。  


©著作权归作者所有:来自51CTO博客作者charles_wang888的原创作品,如需转载,请注明出处,否则将追究法律责任


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐