Servlet生命周期(面试);
Servlet创建
默认情况下,第一次访问Servlet,Servlet被Tomcat创建,并且会调用init方法;
每次访问Servlet都会调用service()方法;
Servlet销毁;
tomcat关闭,Servlet就会被销毁,在销毁在之前调用destory()方法;
每一个Servlet在整个声明周期过程中只会被创建一次。所以说每一个Servlet都是单例;
servlet线程不安全,避免线程安全:
1.尽量不要在Servlet中定义成员变量,如果必须定义,也不要对其修改;
2.如果非要定义成员变量,并且进行修改。加锁;(效率问题)
ServletContext;
介绍:
代表了整个web应用,一个javaweb应用只有一个ServletContext对象;
生命周期:
创建:Tomcat启动,Tomcat会为每个javaweb应用创建一个ServletContext对象;
销毁:Tomcat关闭;
无论通过何种方式,无论在哪里获取。一个javaweb应用,获取的ServletContext对象都是同一个;
请求转发特点;
1.请求转发地址栏不会发生改变;
2.请求转发只能转发到项目的内部资源;
3.请求转发是一次请求; 可以在request域中共享数据;
request对象也是一个域对象;
作用范围:仅仅一次请求有效;浏览器向服务器发送请求,服务器对这次请求做出响应 本次请求结束;
共享数据:
setAttribute(String name,Object obj);
getAttribute(String name);
removeAttribute(String name);
通常使用request作为域对象,在请求转发的过程中共享数据;
重定向和请求转发区别(面试题)
请求转发特点:
1.地址栏不会发生改变;
2.只能转发到项目内部资源
3.一次请求;
重定向:
1.地址栏会发生改变;
2.重定向跳转到外部资源;
3.2次请求,不能再request域中共享数据;
除了请求转发不用虚拟目标,别的都是虚拟目录+访问路径