Servlet生命周期(servlet 从出生到销毁,只会创建一个servlet容器)
1.加载和实例化:(构造方法)只有第一次请求servlet时。创建servlet的实例
2.初始化:(init方法)只被调用一次,在创建好实例后立即调用初始化方法
3.服务的方法:每次请求都会调用service的方法,实际用于响应请求的
4.销毁方法:只调用一次,在当service所在的web应用项目被卸载前调用,用于释放资源
Servlet容器响应客户请求的过程
第一步:servlet引擎检查是否已经装载并创建了该servlet的实例对象,如果是则直接执行第四步,否则执行第二步
第二步:装载并创建servlet的实例对象,调用该servlet的构造器
第三步:调用servlet实例对象的init的方法
第四步:创建一个用于封装请求ServletRequest对象和一个代表响应的消息的ServletResponse对象,然后调用Servlet的service方法并请求和响应对象作为参数传递进去
第五步:web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory的方法
get方式请求的三种方式:
1.通过URL
2.通过超链接
3.通过表单提交,method 值为 get
post方式请求的方式(只有一种)
通过表单提交,设置 method 值为 post
servlet 生命周期各个方法的执行过程:
package com.neuedu.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/test")
public class Test extends HttpServlet {
public Test() {
System.out.println("执行构造方法");
}
@Override
public void init() throws ServletException {
System.out.println("执行 init 方法");
}
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
System.out.println("执行 service 方法");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行 doget 方法");
}
@Override
public void destroy() {
System.out.println("执行 destory 方法");
}
}
当通过浏览器输入url进行请求
输出结果:
执行构造方法
执行 init 方法
执行 doget 方法
执行 service 方法