在idea中要使用HttpServlet需要在对应的模块中导入tomcat依赖
继承关系
Servlet接口--> GenericServlet抽象类 --> HttpServlet抽象子类
- 相关方法
Servlet接口
void init(config)-初始化方法
void service(request,response)-服务方法
客户端发送请求就会自动调用此方法
void destory()-销毁方法
GenericServlet抽象类:
void service(request,response)-任然是抽象类
HttpServlet抽象子类:
void service(request,response)-不是抽象的
1 String method = req.getMethod();获取请求的方式
2 判断,根据不同的请求执行不同的do方法
3 在HttpServlet这个抽象类中do方法都差不多
Servlet生命周期
- 生命周期: 从出生到死亡,对应servlet中的三个方法 init();service();destory() ;
- 默认情况下:
第一次接受请求时,这个Servlet会进行实例化(tomcat底层使用反射调用构造方法进行实例化),初始化,然后服务,从第二次请求开始,每一次都是服务,随着容器的销毁而销毁。 - 通过案例我们发现:Servlet实例只会创建一个,所有的请求都是这个实例去响应(应该是同一个url-pattern),第一次请求时,tomcat才会去实例化,初始化,然后再服务。
如果需要提高系统的启动速度,就是当前的默认情况,请求后再去实例化,初始化,然后服务。如果要提高响应速度我们应该设置Servlet的初始化时机 - Servlet的初始化时机
- 我们可以通过来设置servlet启动的先后顺序,数字越小启动越靠前,最小值为0
<servlet>
<servlet-name>Demo01Servlet</servlet-name>
<servlet-class>com.csy.servlets.Demo01Servlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
-
Servlet在容器中是:单例的、线程不安全的尽量不要在servlet中定义成员变量,如果不得不定义不要去修改它的只,不要去根据成员变量的值做一些逻辑判断。