学习目标:
Servlet生命周期
学习内容:
Servlet的在底层究竟是如何运行的
学习产出:
首先servlet是运行在容器里面的,那么servlet也就有一个创建到销毁的过程
那么它的调用顺序是
1.servlet先调用他自己的无参构造方法
2.再调用init初始化方法
3.然后调用service方法
4.通过service方法来判断发过来的请求是get或者post等等
5.判断后来用特定的doGet或者doPost等方法来处理
6.最后容器关闭时调用destroy方法销毁servlet
下面我来实现一下看看是不是这样运行的
public class Hello extends HttpServlet {
public Hello(){
System.out.println("无参构造方法");
}
@Override
public void init() throws ServletException {
super.init();
System.out.println("调用init了");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service了");
super.service(req, resp);//在父类的sercie方法中它要完成 判断请求方式的工作,再调用对应的doGet(),doPost()
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用doGet了");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用doPost了");
}
@Override
public void destroy() {
super.destroy();
System.out.println("调用了destroy");
}
}
最后我们把容器关闭后调用了destroy
这里还有一个需要注意,不是容器一创建servlet就会立马创建的,默认的情况下是访问了这个servlet才会创建,但是如果我们需要容器一创建就立马创建可以添加
@loadOnStartup注解
意思是:设置什么时候就创建servlet默认为负一则调用才创建,零或大于零则容器一创建则立马创建,值越小则优先级越高