当实现接口时,为了使所用的类中只实现需要的方法,使代码更加简洁,可以定义一个抽象类实现接口,将所需要的方法定义为 抽象方法,然后让类继承此抽象方法即可
public abstract GenericServlet implements Servlet{
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
public class targetClass extende GenericServlet(){
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException{
System.out.println("Target's service is executing");
}
}
提供了GenericServlet类之后,init方法仍会执行,Tomcat创建ServletConfig对象之后,调用了init方法将ServletConfig对象传过来
改进GenericServlet
public abstract GenericServlet implements Servlet{
//config对象可能在其他方法中会被使用到,因此需要定义一个成员变量
private ServletConfig config;
@Override
//不能让子类重写init方法,因为加入config=null,会出问题,所以要给init方法加关键字final来阻止init方法被重写
public final void init(ServletConfig config) throws ServletException {
this.config=config;
//如果必须在子类重写init方法,可以重载以后一个init方法,在原来的init方法中调用即可
this.init();
}
public void init(){
}
@Override
public ServletConfig getServletConfig() {
return config;
}
public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
Servlet规范已经包含完善的GenericServlet
jakarta.servlet.GenericServlet