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

來源:互聯網
上載者:User

最近在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了。  


本文出自 “平行線的凝聚” 部落格,請務必保留此出處http://supercharles888.blog.51cto.com/609344/1338856

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.