什么是Servlet?
Java Web技术是当今主流的互联网Web应用技术之一,而Servlet是Java Web 技术的核心基础。那么什么是Servlet,什么是Servlet容器呢?
最简单的介绍,Servlet是Sun公司提供的一门用于开发动态Web资源的技术。Servlet是一个接口,一个规范。它是运行在Web服务器上的一个Java程序,并且能通过HTTP协议(the HyperText Transfer Protocol)接收Web客户端的请求并且对这些请求进行响应。
Web客户端发起请求,实际上请求的是Web容器中的Web应用中特定Servlet,由于Web应用中的Java类实现了Servlet接口,具体处理请求的逻辑需要放在需要重写的方法service方法里面,这时,再把这些对客户端的响应返回给Web客户端(浏览器)。Servlet充当Web服务器和Web应用的中介,开发者要想开发一个动态的资源,必须实现Servlet接口,并且将该Web应用部署到Web服务器中去。从技术角度来说,定义Servlet接口是为了解耦,通过标准化接口来相互协作。
那么什么是Servlet容器呢?通常,Web服务器与Web应用进行协作的一系列标准接口被Java Servlet API。另外,还有一些Servlet规范,Servlet规范中把能够发布和运行Web应用的Web服务器称为Servlet容器。Servlet容器作为一个独立发展的标准化产品,目前种类很多,各有特点。例如,比较流行的Jetty,还有大家最熟悉的Tomcat。
Servlet的运行流程
(1)Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第(4)步,否则,执行第(2)步。
(2)装载并创建该Servlet的一个实例对象。
(3)调用Servlet实例对象的init()方法。
(4)创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
(5)WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
Servlet生命周期分为三个阶段:
1,初始化阶段 调用init()方法
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
这里只要load-on-startup配置项大于0,那么Servlet在Servlet容器启动时就会被初始化。默认情况下,当WEB客户第一次请求访问某个Servlet的时候,Servlet容器将创建这个Servlet的实例。
Servlet的线程安全问题
ServletConfig
二、当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
ServletContext
二、ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。