The throws clause of doGet() of HttpServlet class has ServletException as well as IOException. So the subclass servlet's doGet method can have a throws clause containing either of these exceptions (or both or none, refer SCJP ).
Now, based on what the servlet is doing in its doGet method, it can define its throws clause. For example, if the method body does not call any method that throws IOException, the method declaration of doGet may choose not to list IOException in its throws clause. Same for ServletException.