Sì, è possibile avere solo 1 <error-page> con il solo <location> e così gestisci tutti gli errori/eccezioni.
PageContext ha un getErrorData() che fornisce un oggetto ErrorData. Se la pagina di errore ha il isErrorPage="true", i dati nel ErrorData sono validi e significativi (altrimenti non sono usabili).
All'interno del ErrorData ci sono status-code e l'eccezione (e altro, vedi documentazione). Lo status-code c'è sempre, l'eccezione no, può mancare (=null).
Quindi qualcosa del tipo:
codice:<%@ page isErrorPage="true" ....altri attributi.... %> ... <% if (pageContext.getErrorData().getThrowable() != null) { %> ... errore per eccezione ... <% } else { %> ... errore per status-code ... <% } %>