Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求与服务器响应的中间层。
Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载。
Servlet 接口的方法(Servlet 的生命周期)
(1) 加载和实例化
Servlet 容器装载和实例化一个 Servlet。创建出该 Servlet 类的一个实例。
(2) 初始化 void init(ServletConfig config)
在 Servlet 实例化完成之后,容器负责调用该 Servlet 实例的 init() 方法,在处理用户请求之前,来做一些额外的初始化工作。
(3) 处理请求 void service(ServletRequest req,ServletResPonse res)
由 Servlet 容器调用,运行与请求对应的 Servlet 实例的 service() 方法,service() 方法再派遣运行与请求相对应的 doXX(doGet,doPost)
(4) 销毁 void destroy()
当 Servlet 容器决定将一个 Servlet 从服务器中移除时 ( 如 Servlet 文件被更新 ),便调用该 Servlet 实例的 destroy() 方法.
其中,(1)(2)(4) 在 Servlet 的整个生命周期中只会被执行一次。
Servlet 接口中还有:(ServletConfig与ServletContext的区别)
ServletConfig getServletConfig()方法返回一个ServletConfig对象(是init()的参数),该对象中包含servlet启动配置信息.这个信息中包括了所有初始化参数和一个ServletContext对象.
注:getServletContext()返回一个ServletContext对象,该对象包含关于servlet运行环境的信息.
String getServletInfo() : 返回有关Servlet的信息
JSP的本质即使一个Servlet:
当浏览器向服务器请求 JSP 页面时,服务器收到该请求后,首先检查所请求的这个JSP 文件内容是否已经被更新,或者是否是 JSP 创建后的第一次被访问,如果是,那么,这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件。紧接着,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到 jvm 解释执行。剩下的就等同于 Servlet 的处理过程了。
如果被请求的 JSP 文件内容没有被修改,那么由服务器检索出与之对应的 Servlet 实例来处理。
注:就 Tomcat 而言,打开目录 %Tomcat%/work/%您的工程文件目录%,然后会看到里面有 3个子目录:org/apache/jsp,若没有这 3 个目录,说明项目的 JSP 文件还没有被访问过,打开进到 jsp 目录下,会看到一些 *_jsp.java 和 *_jsp.class 文件,这就是 JSP 文件被转换成Servlet 类的源文件和字节码文件了。
下面为 jsp 与 Servlet 工作流程图: