0.什么是servlet1.servlet的生命周期2.对于Servlet初始化阶段:在什么时候Servlet容器会装载Servlet:3.简述一下Servlet工作原理,Servlet接管和响应客户申请的过程4.Servlet响应申请阶段:5.Servlet与JSP的比拟:6.申请对象和响应对象的生命周期7.多个Servlet之间调用规定:8.转发和重定向
转:https://blog.csdn.net/w132492...
转:https://www.cnblogs.com/chenf...
0.什么是servlet
宏观地讲,Servlet 是连贯 Web服务器与 服务端Java程序的协定,是一种通信标准。
这个标准是以一套接口的模式体现的。
通常来说,Servlet 是宏观上 Servlet标准中的一个具体的接口,Servlet标准中蕴含一套接口。而 Servlet 接口仅仅是其中之一。
宏观地讲,Servlet 是 Servlet接口实现类的一个实例对象,是运行在服务器上的一段 Java小程序,
即 Server Applet,也就是 Servlet 这个单词的来历。
Servlet 的次要性能是依据客户端提交的申请,调用服务器端相干 Java代码,实现对申请的解决与运算。
1.servlet的生命周期
Servlet生命周期分为三个阶段:
(1)初始化阶段 调用init()办法
(2)响应客户申请阶段 调用service()办法
(3)终止阶段 调用destroy()办法
web容器加载servlet,生命周期开始。通过调用servlet的init()办法进行servlet的初始化。通过调用service()办法对申请进行响应,依据不同的申请调用不同的doXxx()办法。
当WEB利用被终止,或Servlet容器终止运行,或Servlet容器从新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()办法,在destroy()办法中能够开释掉Servlet所占用的资源。
2.对于Servlet初始化阶段:在什么时候Servlet容器会装载Servlet:
(1)Servlet容器启动时主动装载某些Servlet,实现它只须要在web.XML文件中的<Servlet></Servlet>之间增加如下代码:
<loadon-startup>1</loadon-startup>
(2)在Servlet容器启动后,当WEB客户第一次申请拜访某个Servlet的时候,WEB容器将创立这个Servlet的实例
(3)Servlet类文件被更新后,从新装载Servlet
Servlet被装载后,Servlet容器创立一个Servlet实例并且调用Servlet的init()办法进行初始化。在Servlet的整个生命周期内,init()办法只被调用一次。
3.简述一下Servlet工作原理,Servlet接管和响应客户申请的过程
首先简略解释一下Servlet接管和响应客户申请的过程,首先客户发送一个申请,Servlet是调用service()办法对申请进行响应,service办法主动差遣运行与申请对应的doXXX办法(doGet,doPost)等,而后再进入对应的办法中调用逻辑层的办法,实现对客户的响应。咱们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些办法。
每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个办法,其中比拟重要的三个办法波及到Servlet的生命周期,别离是上文提到的init(),service(),destroy()办法。GenericServlet是一个通用的,不特定于任何协定的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因而HttpServlet也实现了Servlet接口。所以咱们定义Servlet的时候只须要继承HttpServlet即可。
Servlet接口和GenericServlet是不特定于任何协定的,而HttpServlet是特定于HTTP协定的类,所以HttpServlet中实现了service()办法,并将申请ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。咱们须要在自定义的Servlet中override这些办法!
4.Servlet响应申请阶段:
对于用户达到Servlet的申请,Servlet容器会创立特定于这个申请的ServletRequest对象和ServletResponse对象,而后调用Servlet的service办法。service办法从ServletRequest对象取得客户申请信息,解决该申请,并通过ServletResponse对象向客户返回响应信息。
对于Tomcat来说,它会将传递过去的参数放在一个Hashtable中,该Hashtable的定义是:
private Hashtable<String String[]> paramHashStringArray = new Hashtable<String String[]>();
这是一个String-->String[]的键值映射。
HashMap线程不平安的,Hashtable线程平安。
5.Servlet与JSP的比拟:
有许多相似之处,都能够生成动静网页。
JSP的长处是擅长于网页制作,生成动静页面比拟直观,毛病是不容易跟踪与排错。
Servlet是纯Java语言,擅长于解决流程和业务逻辑,毛病是生成动静网页不直观。
6.申请对象和响应对象的生命周期
在Http服务器接管到浏览器发送的【Http申请协定包】之后,
主动为以后的【Http申请协定包】生成一个【申请对象request】和一个【响应对象response】
在Http服务器调用doGet/doPost办法时,负责将【申请对象】和【响应对象】作为实参
传递到办法,确保doGet/doPost正确执行
在Http服务器筹备推送Http响应协定包之前,负责将本次申请关联的【申请对象】和【响应对象】销毁
【申请对象】和【响应对象】生命周期贯通一次申请的处理过程中
【申请对象】和【响应对象】相当于用户在服务端的代言人
7.多个Servlet之间调用规定:
1)【重定向】解决方案
2)【申请转发】解决方案
8.转发和重定向
转发是在服务器端实现的,重定向是在客户端产生的;转发的速度快,重定向速度慢;转发是同一次申请,重定向是两次申请;转发地址栏没有变动,重定向地址栏有变动;转发必须是在同一台服务器下实现,重定向能够在不同的服务器下实现。