Servlet继承结构
1. 顶级 Servlet 接口
// 顶级的Servlet接口
public interface Servlet {// 初始化方法,构造完毕后,由tomcat自动调用完成初始化功能的方法void init(ServletConfig var1) throws ServletException;// 获取ServletConfig对象的方法ServletConfig getServletConfig();// 接收用户请求,向用于响应信息的方法void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;// 返回Servlet字符串形式描述信息的方法String getServletInfo();// Servlet在回收前,由tomcat调用的销毁方法,往往用于做资源的释放工作void destroy();
}
2. 抽象类 GenericServlet
// 抽象的类 GenericServlet(对Servlet接口的基础实现,简化子类开发)
public abstract class GenericServlet implements Servlet {private transient ServletConfig config;public void destroy() {// 将抽象方法,重写为普通方法,在方法内部没有任何的实现代码// 空实现}// tomcat在调用init方法时,会读取配置信息进入一个ServletConfig对象并将该对象传入init方法public void init(ServletConfig config) throws ServletException {// 将config对象存储为当前的属性this.config = config;// 调用了重载的无参的initthis.init();}// 重载的初始化方法,我们重写初始化方法时对应的方法(子类可重写此方法做自定义初始化)public void init() throws ServletException {}// 返回ServletConfig的方法(供子类或外部获取配置)public ServletConfig getServletConfig() {return this.config;}// 再次抽象声明service方法(子类必须实现,处理具体请求)public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
}
3. 抽象类 HttpServlet
// HttpServlet 抽象类,侧重 service 方法的处理
public abstract class HttpServlet extends GenericServlet {// service 方法,处理 ServletRequest 和 ServletResponsepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// 参数的转子,将 ServletRequest 转为 HttpServletRequestHttpServletRequest request = (HttpServletRequest) req;// 将 ServletResponse 转为 HttpServletResponseHttpServletResponse response = (HttpServletResponse) res;// 调用重载的 service 方法,传入转换后的 HttpServletRequest 和 HttpServletResponsethis.service(request, response);}
}
4. 自定义 Servlet 类
ServletLifeCycle
注释
// @WebServlet:将Servlet映射到路径,loadOnStartup=6指定启动优先级(数值越小越先初始化)
@WebServlet(value = "/servletLifeCycle", loadOnStartup = 6)
public class ServletLifeCycle extends HttpServlet {int i = 10;// 构造器:Servlet实例化时调用(仅一次)public ServletLifeCycle() {System.out.println("构造器");}// 初始化方法:Servlet初始化时调用(仅一次,在构造器之后)@Overridepublic void init() throws ServletException {System.out.println("初始化");}// 服务方法:每次请求都会调用(处理业务逻辑)@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {i++;System.out.println("服务");}// 销毁方法:Servlet销毁前调用(仅一次,释放资源)@Overridepublic void destroy() {System.out.println("destory");}
}
service 方法不要修改 成员变量 避免产生并发修改异常