Servlet是JavaWeb应用开发的核心组件。Servlet运行在Servlet容器中(例如最常用的Tomcat),它可以为各种客户请求提供相应服务。Servlet可以轻松完成以下任务:
- 动态生成HTML文档(即服务端交互,动态页面)
- 把请求转发给同一个Web应用中的其他Servlet组件。
- 访问服务器资源(如数据库访问)
- 读取客户端的Cookie。
ServletAPI有4个包,如下:
- javax.servlet :包含定义了Servlet与Servlet容器之间签约的类和接口。
- javax.servlet.http : 包含定义了HttpServlet与与Servlet容器之间签约的类和接口。
- javax.servlet.annotation :包含对Servlet、Filter和Listener进行标注的注解。即Servlet3.0的注解配置。
- javax.servlet.descriptor:包含为Web应用的配置信息提供编程式访问的类型。
servlet包和servlet.tttp包之间主要接口和类的关系如下:
Servlet的重点对象
请求对象(ServletRequest和HttpServletRequest) :Servlet获取请求头信息。
响应对象(ServletResponse和HttpServletResponse) :Servlet生成响应结果。
Servlet配置对象(ServletConfig):Servlet容器创建Servlet实例时,传入一个ServletConfig对象。 Servlet通过该对象来获取初始化参数及ServletContext对象。【初始化参数仅作用该Servlet本身】
Servlet上下文对象(ServletContext):Servlet容器启动Web应用时,创建唯一的ServletContext对象,即代表Web应用。 通过ServletContext对象可以共享web应用资源,可以用于在多个Servlet中共享数据。
【注意:Servlet容器启动时,JavaWeb应用会被启动,ServletContext对象随之创建】
Servlet接口的5个方法
init() //创建servlet实例时,初始化servlet参数。 service() //根据请求方式,处理客户端请求,并发出响应结果。 destroy() //Web应用销毁(停止运行)时,执行该方法。通常用于回收资源。 getServletConfig() //返回一个ServletConfig对象,该对象表示Servlet配置信息。 getServletInfo() //返回关于该Servlet的说明信息。
Servlet生命周期
init()、service()和destroy()分别对应Servlet的三个阶段:初始化阶段、运行时阶段和销毁阶段。
对应如下的Servlet执行流程:
当客户端向某个Web服务器发出请求,Tomcat(Servlet容器)接收并解析HTTP请求,然后调用匹配请求的Servlet类。
1.创建Servlet实例,执行init()完成初始化,Servlet容器传入一个ServletConfig对象。 2.根据请求方式,调用相应的响应方法(doGet()、doPost()或service()),传入包含请求信息的HttpServletRequest对象和用于响应的HttpServletResponse对象,生成响应结果。 3.Servlet容器将响应结果发送给客户端,然后执行destroy()方法,销毁和该Servlet有关的对象。例如请求对象、响应对象以及ServletConfig。至此,Servlet的生命周期结束。
额外说明:
创建Servlet实例有两种时机:
1.客户端发起请求,相应的Servlet实例才开始创建。
2.Web应用一启动,就创建Servlet实例,这里方式需要配置一下:<servlet>中配置<load-on-startup>1</load-on-startup>,值越小,实例化优先级越高。注解配置Servlet,则指定参数loadOnStartup = 1。
关于Servlet初始化参数和Web应用的上下文参数的配置方式,在web.xml文件中:
<!-- Web应用参数,可以被Web应用中所有Servlet所共享 --> <context-param> <param-name>movement</param-name> <param-value>10086</param-value> </context-param> <context-param> <param-name>railway</param-name> <param-value>12306</param-value> </context-param> <servlet> <servlet-name>ServletConfig_Context_Test</servlet-name> <servlet-class>com.test.ServletConfig_Context_Test</servlet-class> <!-- Servlet的初始化参数 --> <init-param> <param-name>sevletConfig01</param-name> <param-value>测试servlet配置信息</param-value> </init-param> </servlet>
若是注解配置Servlet初始化参数,如下:
@WebServlet(urlPatterns= {"/瞎写的URL"}, name="arbitrary", initParams= { @WebInitParam(name="admin", value="牛批"), @WebInitParam(name="info", value="10086") } ) public class InitParamServlet extends HttpServlet{ //省略..... }
原文地址:https://www.cnblogs.com/fwnboke/p/9119244.html