[color=green]1. Servlet的生命周期?[/color]
Servlet是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生命周期的具体说明如下:
*
Servlet容器完成加载Servlet类和实例化一个Servlet对象
*
init()方法完成初始化工作,该方法由Servlet容器调用完成
*
service()方法处理客户端请求,并返回响应结果
*
destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源
[color=green]2. Servlet的实例是在生命周期什么时候创建的? 配置servlet最重要的是什么?[/color]
Servlet实例是在servlet第一次在容器中被加载的是时候创建的, Init()方法是用来配置这个servlet实力的,这个方法在servlet的生命周期中只被调用一次,所以应该把所有servlet生命周期中的配置操作都写在这个方法法里面。
[color=green]3. 为什么不在Servlet中写一个构造(Contructor)方法?[/color]
容器会自动为Servlet写一个无参的构造方法
[color=green]4. 我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢?[/color]
容器会自动为Servlet写一个无参的构造方法,容器是用Class.forName(className).newInstance()来创建servlet的实例的。
[color=green]5. 当容器调用servlet的destory()方法的时候,servlet会马上销毁么? 如果当时这个servlet正在执行其他任务或者线程呢?[/color]
是的, 当容器调用servlet的destory()方法的时候,servlet会马上销毁,但是容器在调用destory()方法之前,会等servlet的service()方法结束剩余的任务。
[color=green]6. 用ServletRequest和ServletContext调用ReqestDispatcher有什么区别?[/color]
在用ServletRequest调用RequestDispatcher的时候可以用相对URL, 但是ServletContext不行。
[color=green]7. 为什么在用ServletRequest.getRequestDispatcher()的时候可以用相对URL而用ServletContext.getRequestDispatch()的时候不可以?[/color]
因为ServletRequest包含当前的request path,可以用当前的request path去计算URL,但是ServletContext不包含当前的request path。