(五)Servlet教程——Servlet是什么

1. Servlet简介

        Servlet即Java服务小程序,是使用应用程序设计接口以及相关类和方法的Java程序。它可以作为一种插件,嵌入到Web服务器中运行,提供诸如HTTP、FTP等协议服务,甚至用户自己定制的协议服务。Servlet在服务器上运行主要用来处理和客户之间的通信,当客户端传来一个HTTP请求时,通过调用Servlet方法来向客户端发送一个响应。Servlet早于JSP技术,是JSP技术的基础。

        Servlet在本质上就是Java类,编写Servlet需要遵循Java的基本语法,而且必须遵循特数的规范,使用Servlet几乎可以处理HTTP协议的各个方面的内容。Servlet技术与其他的动态网页编程技术相比,有很多自己的特点。

(1)Servlet程序在加载执行之后,它的实例在一段时间内会一直驻留在服务器的内存中,若有请求,服务器会调用Servlet实例来服务。并且当多个客户请求一个Servlet时,服务器会为每个请求启动一个线程来处理,所以效率高。

(2)Servlet有强类型检查功能,并且利用Java的垃圾回收机制避免内存管理上的问题。另外,Servlet能够安全地处理各种错误,不会因为发生程序上逻辑错误而导致整体服务器系统的崩溃。

(3)Servlet可以转发请求给其他的服务器和Servlet。

(4)Servlet可以使用Java API核心的所有功能,这些功能包括Web和URL访问、图像处理、数据压缩、多线程、JDBC、RMI、序列化对象等。

2. Servlet基本结构

        任何一个Servlet程序必须直接或间接实现javax.servlet.Servlet接口,这个接口中有5个方法必须实现。

1. void destroy();被Servlet容器调用销毁一个Servlet实例。

2. ServletConfig getServletConfig();获得ServletConfig对象,里面包含Servlet的初始化信息。

3. String getServletInfo();获取Servlet信息,如作者、版本号及版权等。

4. void Init(ServletConfig config);被Servlet容器调用初始化一个Servlet类实例。

5. void service(ServletRequest req,ServletResponse res);被Servlet容器调用使得Servlet能够接收用户请求并做出响应。

        实际上,不需要直接实现Servlet接口。Java Servlet API已经写好了基本实现这个接口的两个抽象类,分别是GenericServlet和HttpServlet。

        因为目前网络上大部分的请求/响应都是基于HTTP协议的,所以大多数Servlet程序都是继承自javax.servlet.HttpServlet类。HttpServlet是GenericServlet的子类,它仅支持基于HTTP协议的请求/响应。

        如果某个类要成为Servlet,则它应该从HttpServlet继承,根据数据是通过GET还是POST发送,覆盖doGet、doPost方法之一或者全部。
        所谓的GET请求,可以把它看成是当用户在浏览器地址栏输入URL、单击Web页面中的链接、提交没有指定method的表单时浏览器所发出的请求。

        POST请求是提交那些指定了method=“POST”的表单时所发出的请求。

        doGet和doPost方法都有两个参数,分别为HttpServletRequest类型和HttpServletResponse类型。

3.Servlet运行机制

       Servlet容器在HTTP通信和Web服务器平台之间实现了一个抽象层。Servlet容器负责把请求传递给Servlet,并把结果返回给客户。在使用Servlet的过程中,并发访问的问题由Servlet容器处理,当多个用户请求同一个Servlet的时候,Servlet容器负责为每个用户启动一个线程,这些线程的运行和销毁由Servlet容器负责,而在传统的CGI程序中,是为每个用户启动一个进程,因此Servlet的运行效率要比CGI高出很多。

Servlet工作过程

1. 浏览器向Web服务器发出请求。例如,使用浏览器按照HTTP协议键入一个URL地址,向Web服务器提出请求。

2. Web服务器响应请求后把发送给Servlet的请求转交给Servlet引擎处理。

3. 接受到访问某个Servlet的请求之后,Servlet引擎首先检查是否已经装在并创建了该Servlet实例对象。如果没有创建,将装载并创建Servlet的实例对象,调用Servlet实例对象的init()方法,以便执行Servlet的一些初始工作。

4. Servlet引擎将创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的Service方法并将请求和响应对象作为参数传递进去。如果Servlet中含有访问数据库的操作,则还要通过相关的JDBC驱动程序,与数据库相连,对数据库进行访问。

5. Web服务器将页面发送回浏览器。最后Servlet将动态生成的标准HTML页面送给客户浏览器。

        在一个Web应用程序被停止或重新启动之前,Servlet引擎将卸载其中运行的Servlet,在卸载Servlet之前,Servlet引擎将调用Servlet的destroy()方法,以便在这个方法中执行Servlet的清尾工作,如释放一些被该Servlet占用的资源。Servlet引擎卸载某个Servlet以后,该Servlet实例对象变成垃圾,等待Java虚拟机的垃圾收集器将其彻底从内存中清除。

相关推荐

  1. ()Servlet教程——Servlet什么

    2024-04-25 15:18:03       36 阅读
  2. <span style='color:red;'>Servlet</span>

    Servlet

    2024-04-25 15:18:03      45 阅读
  3. <span style='color:red;'>servlet</span>

    servlet

    2024-04-25 15:18:03      66 阅读
  4. <span style='color:red;'>Servlet</span>

    Servlet

    2024-04-25 15:18:03      32 阅读
  5. <span style='color:red;'>Servlet</span>

    Servlet

    2024-04-25 15:18:03      35 阅读
  6. servlet

    2024-04-25 15:18:03       30 阅读
  7. <span style='color:red;'>Servlet</span>

    Servlet

    2024-04-25 15:18:03      21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 15:18:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 15:18:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 15:18:03       87 阅读
  4. Python语言-面向对象

    2024-04-25 15:18:03       96 阅读

热门阅读

  1. 1002 - 编程求解1+2+3+...+n

    2024-04-25 15:18:03       33 阅读
  2. Gradle的安装配置及使用

    2024-04-25 15:18:03       37 阅读
  3. nvm安装

    2024-04-25 15:18:03       38 阅读
  4. 服务端测试与功能测试

    2024-04-25 15:18:03       30 阅读
  5. 买卖股票+跳跃游戏 贪心算法

    2024-04-25 15:18:03       29 阅读
  6. python小知识:@property、@setter 使用

    2024-04-25 15:18:03       34 阅读
  7. Flutter 之 Widget

    2024-04-25 15:18:03       34 阅读