/**
* 这是一个接口,自己写的Servlet服务可以直接实现这个接口;如果通过实现该接口来定义Servlet服务,则需要实现所有方法,相对来说比较麻烦,
* 一般写业务逻辑根本不需要直接实现该接口来写功能
* 一般继承HttpServlet,其次可以继承GenericServlet,最后当然也可以实现Servlet接口。
* 方便程度顺序递减。
* 下面介绍而所有接口,三个感叹号个人感觉是非常重要的地方。
*/
public interface Servlet {
/**
* 该方法属于生命周期方法!!!
* 只会调用一次!!!
* 是在第一次访问时才调用的!!!之后在整个服务运行过程中都不会再调用,如果服务运行中,该Servlet服务没有被访问过,也不会调用。
* 在创建对象时调用(构造方法之后调用)。
* 该方法一般情况下只需要覆写一个空方法就行。这个ServletConfig也是一个接口,在这里不是重点介绍内容,不再赘述,只要记得该参数不需要自己配置
* 如果使用tomcat,服务启动,web.xml中相关配置参数,可以通过该参数的方法获得。
* @param config
* @throws ServletException
*/
public void init(ServletConfig config) throws ServletException;
/**
* 获取该Servlet的配置信息。注意只是本Servlet的配置信息,每一个你写的Servlet都对应一个ServletConfig;
* 实现空方法即可,基本没用,如果对你来说有用,不如继承GenericServlet类,至于为什么,自行查看GenericServlet类就明白,之后也会专门写文章分析GenericServlet源码。
* @return
*/
public ServletConfig getServletConfig();
/**
* 这里就是需要处理业务的方法,具体用法不用多说,事实上,一般情况下,只需要在这里实现自己的业务逻辑即可。
* 这是第二个生命周期方法!!!
* 每次访问,该方法都会执行!!!
* @param req 请求
* @param res 响应
* @throws ServletException
* @throws IOException
*/
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
/**
* 覆写空方法即可,几乎没有用,说几乎都感觉有点谦虚了。
* @return
*/
public String getServletInfo();
/**
* 第三个,也是最后一个生命周期方法!!!
* 只会执行一次,在对象销毁前执行!!!
* 可以在这里处理服务正常停止时,该Servlet必须在销毁之前执行的逻辑。
* 一般情况下只需要覆写空方法即可,如果是正常的业务逻辑,一般也不会在这里写服务停止时必须执行完的业务逻辑。
*/
public void destroy();
}
一个示例:
import javax.servlet.*;
import java.io.IOException;
public class MyServlet01 implements Servlet {
ServletConfig config;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
/**
* TODO 这里实现初始化
*/
this.config = servletConfig;
}
@Override
public ServletConfig getServletConfig() {
return this.config;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// TODO 业务逻辑
}
@Override
public String getServletInfo() {
return "";
}
@Override
public void destroy() {
// TODO 销毁
}
}