zoukankan      html  css  js  c++  java
  • 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() 方法。

    
    


     

  • 相关阅读:
    git ignore 添加忽略文件
    python| 闭包函数及装饰器
    python | DRF 框架知识总览
    python | CHROME底层原理和HTTP协议
    python| css 背景图片虚化效果
    python | js 图片与base64互相转换
    python | Linux各目录及每个目录的详细介绍
    python | 解决Django+Vue前后端分离的跨域问题及关闭csrf验证
    python | Nginx负载均衡策略
    python | Linux 搭建Nginx+uWSGI+Django环境
  • 原文地址:https://www.cnblogs.com/freemanabc/p/5399999.html
Copyright © 2011-2022 走看看