最开始的servlet接口
public interface Servlet {
public void init (ServletConfig config) throws ServletException;
public void service (ServletRequest req, ServletResponse res) throws ServletException, IOException;
public void destroy ();
public String getServletInfo ();
public ServletConfig getServletConfig ();
}
有这五种方法,但是有个问题是我们在用servlet接口的时候,要重写这五个方法,但实际上我们最常用的还是init(),service(),destroy()这三个方法,于是我们发展出了GenericServlet抽象类,用于用于包装Servlet接口,其中提供了很多Servlet接口的默认实现,这样我们实现Servlet的时候,就不必实现Servlet接口的所有方法,只重写核心方法即可。
GenericServlet抽象类,定义了一个通用的,不依赖于具体协议的servlet,给出了除了service()方法外的其余四个方法的实现。所以当我们写了一个类继承GenericServlet的话,只需要重写service方法,但由于GenericServlet不带有具体协议,只要浏览器有发送请求,GenericServlet不会区分出是什么请求,就会直接调用你重写的service方法,于是servlet又“升级”了一次,也就是HttpServlet,里面带有doGet(),doPost(),doPut()等等。这样就可以区分请求的类型。
我们现在自己编写的servlet应该继承HttpServlet,一般要覆盖doGet(),doPost()方法。
**总结:**在当前的Servlet 版本中,我们创建的Servlet 只需要继承HttpServlet 并复写 service 方法即可。但是本质上,我们应该是直接实现 Servlet 接口的。但是 Servlet 接口中提供了5个方法,而我们真正想实现的是 service 方法,所以呢我们使用抽象类 GenericServlet 实现Serviet 接口,并提供抽象方法 service。那么,这个时候我们去继承 GenericServletr 然后实现 service 方法即可,美滋滋。但是,又因为浏览器发起的请求是由方式的,我们又希望可以根据浏览器的请求的方式,来调用对用的逻银方法来处理请求,而 tomcat 一旦接受到请求后,就会调用 service 方法来处理,于是我们使用 HttpServlet 来解决这个问题。我们让 HttpServlet继承GenericServlet,并实现 service 方法,然后在 service 方法中根据
请求方式去调用对应的doxxx 方法来处理请求。所以,我们自己声明的 Servlet 类需要继承 HttpServlet,并提供 doxxX 方法或者直接重写 service 方法即可。



