...I never can decide between these two. I'm always going back to the code and switching between.
When you're coding - let's say a Login class - from an (extended) HttpServlet, which sports both ServletException and IOException, and you just want to throw further your exception (e.g. NoSuchAlgorithmException, NamingException) to see it in a page of your application later, which one do you throw it through: ServletException or IOException?
P.S.: I don't try to catch every possible NoSuchAlgorithmException, NamingException, etc. because I can miss a real cause that I haven't seen before and treat it the wrong way or inform the wrong thing to the user.