共计 2779 个字符,预计需要花费 7 分钟才能阅读完成。
0. 什么是 servlet
1.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. 转发和重定向
转发是在服务器端实现的,重定向是在客户端产生的;转发的速度快,重定向速度慢;转发是同一次申请,重定向是两次申请;转发地址栏没有变动,重定向地址栏有变动;转发必须是在同一台服务器下实现,重定向能够在不同的服务器下实现。