Servlet入门

1、什么是servlet?

   servlet 是部署运行在服务器端的java程序, 用来处理客户端请求,与数据库交互生成响应内容并返回给客户端的中间层,可生成web动态页面。

   优点:

      (1)Servlet在Web服务器的地址空间内执行,不会创建单独的进程来处理每一个请求。

      (2)Servlet独立于平台

      (3)服务器上的java安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,servlet是可信的。

      (4)Java类库的全部功能对servlet都是可用的,它可以通过sockets和RMI机智与applets、数据库或其它软件进行交互。

2、Servlet架构

      Servlet在Web用用程序中的位置:

      

3、Servlet任务

Servlet主要执行以下任务:

   (1)读取客户端(Browser)发送的显式的数据,这包括网页上的HTML表单,或者也可以是来自applet或自定义的http客户端程序的表单。

   (2)读取客户端隐式的HTTP请求数据,这包括cookies、媒体类型和浏览器能理解的压缩格式等等。

   (3)处理数据并生成结果,这个过程可能需要访问数据库,执行RMI或CORBA调用,调用web服务,或者直接计算得出对应的响应。

   (4)发送显式的数据(即文档)到客户端(Browser),该文档的格式可以试多种多样的,包括文本文件(HTML或XML)、二进制文件(GIF图像)、Excel等。

   (5)发送隐式的HTTP响应到客户端(Browser),这包括高速浏览器或其它客户端被返回的文档类型(例如HTML),设置cookies和缓存参数,以及其它类似的任务。

4、Servlet包

    Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类,

    Servlet可以使用javax.servlet和javax.servlet.http包创建它是Java企业版的标准组成,Java企业版是支持大型开发项目的Java类库的扩展版本。

    这些类实现Java Servlet和JSP规范。

    Javax.servlet.*: 存放于HTTP协议无关的一般性Servlet类。

    Javax.servlet.http.*:除了继承javax.servlet.*之外,并且还增加与HTTP协议有关的功能。

     :若Servlet程序和HTTP协议无关,那么必须继承javax.servlet.GenericServlet类

           若Servlet程序和HTTP协议有关,那么必须继承javax.servlet.http.HttpServlet类

          Genericservlet:提供了servlet接口的基本实现,它的子类都必须实现service()方法。

          HttpServlet : 创建servlet,它扩展了Genericservlet,并且提供了servlet接口中具体与HTTP的实现。

5、Servlet生命周期

     servlet生命周期是指创建Servlet实例后,存在的时间以及何时销毁的整个过程。

       (1) init()方法初始化Servlet

       (2)service()方法处理客户端请求

       (3)destroy()方法终止/结束Servlet

       (4)Servlet由JVM的垃圾回收器进行销毁

      init()方法

           当用户调用一个Servlet时,init方法被调用,且只调用一次,负责创建或加载一些数据,用于Servlet的整个生命周期。    

public void init() throws ServletException {
  // 初始化代码...
}

      service()方法

        负责执行实际任务的主要方法,Servlet容器(即Web服务器)调用service()方法来处理来自客户端的请求,并把格式化的响应写回客户端。每次服务器接收到一个Servlet请求时,会产生一个新的线程并调用服务,service()方法检查HTTP请求类型(Get、Post、Put、Delete等),最终调用响应的方法。

public void service(ServletRequest request, 
                    ServletResponse response) 
      throws ServletException, IOException{
}

       doGet() 方法

           GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

       doPost() 方法

           POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

      destroy() 方法

           destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

          在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:

  public void destroy() {
    // 终止化代码...
  }
6、架构图

下图显示了一个典型的 Servlet 生命周期方案。

  • 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
  • Servlet 容器在调用 service() 方法之前加载 Servlet。
  • 然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。



 

原文地址:https://www.cnblogs.com/freemanabc/p/5399999.html