【Servlet】Servlet介绍

来源:互联网 发布:2016年电信诈骗数据 编辑:程序博客网 时间:2024/04/28 08:31

Servlet是开发Servlet应用程序的主要技术。掌握Servlet API是成为Java Web高手的基础;Servlet API定义了70多种类型;

Servlet API 概述

Servlet API中有4个Java包,包括:

  1. javax.servlet:定义了Servlet与Servlet容器之间契约的类和接口;
  2. javax.servlet.http:定义包含HTTPServlet与Servlet容器之间的契约的类和接口;
  3. javax.servlet.annotation:包含对Servlet,Filter和Listener进行标注注解;还为标注元件指定的元数据
  4. javax.servlet.descriptor:定义为Web应用程序的配置信息提供编程式访问的类型;

javax.servlet包

Servlet技术的核心是Servlet接口,是所有Servlet类都必须直接或者间接实现的接口,当编写Servlet接口的Servlet类时候,直接实现它;当扩展一个实现这个接口的类时,则间接实现它;

Servlet接口定义了一个Servlet和Servlet容器之间的一个契约;这个契约归结起来就是:Servlet容器会把Servlet类加载到内存中,并在Servlet实例中调用特定的方法,在一个应用程序中,一个Servlet只有一个实例;

用户的请求会引发Servlet容器调用一个Servlet的service方法,并给这个方法传入一个ServletRequest实例和一个ServletResponse实例;ServletRequest封装当前Http请求,以便Servlet的开发者不必解析和操作原始的HTTP数据;ServletResponse表示当前用户HTTP响应,它的作用是使响应传送给用户更容易;

Servlet容器还未每个应用程序创建了一个ServletContext实例,这个对象封装context(应用程序)的环境细节;每个context只有一个ServletContext;每个Servlet实例还有一个封装的Servlet配置信息的ServletConfig;

先看一个Servlet接口:
Servlet定义的5中方法:

void init (ServletConfig config) throws ServletException;void service(ServletRequest request,ServletResponse response) throws ServletException,java.io.IOException;void destory();java.lang.String  getServletInfo();ServletConfig getServletConfig();

init,service和destory方法属于Servlet周期方法;Servlet容器将根据以下原则调用这三个方法:

init

:第一次请求Servlet时,Servlet容器就会调用这个方法,在后续的请求中,将不再调用这个方法;可以利用这个方法来编写一些应用程序初始化相关的代码;在调用这个方法时,Servlet容器会传递一个ServletConfig;一般来说,会将ServletConfig赋值给一个级类变量,一遍Servlet类中的其它的方法也可以使用这个对象;

service

:每次请求Servlet时,Servlet容器都会调用这个方法;多次使用;这个是核心方法,必须编写Servlet完成的相应代码、第一次请求Servlet时,Servlet容器会调用init方法和service方法,对于后续的请求,则只调用service方法;

destory

:要销毁Servlet容器时调用,通常发生在卸载应用程序,或者关闭Servlet容器的时候,一般来说,可以在这个方法中编写一些资源清理相关代码;

Servlet中另外两个方法是非生命周期的:getServletInfo和getServletConfig;

getServletInfo

:返回Servlet的描述;

getServletConfig

:返回Servlet容器传递给init方法的ServletConfig;但是,为了让getServletConfig返回值不为null,你需要为给init方法的ServletConfg赋一个类级变量;

最后,要注意线程安全,一个应用程序中所有的用户将共用一个Servlet实例,因此不建议使用类级变量,除非它们是只读的。或者是java.util.concurrent.atomic包中的成员,即原子类;

原创粉丝点击