Servlet 简介

一种用于创建 web 应用的技术

  • 用于创建动态 web Application
  • an API

    • 包括多个接口和类
  • 创建一个 Servlet 必须要实现 Servlet 的接口
  • 用于扩展服务器 Server, 处理 Request 的功能
  • Servlet 是一个 Web component, 用于部署到服务器来创建动态网页

Web Application

组成组件 Components

  • Servlet
  • JSP
  • Filter
  • HTML
  • CSS
  • JavaScript

Servlet VS CGI

https://www.javatpoint.com/servlet-tutorial

CGI

  • 每一个 Request 创建一个进程
  • client 数量多时,对 Request 响应生成 Response 的时间更长
  • 使用 平台依赖语言,如:C, C++, perl

Servlet

使用线程

  • Better performance: 使用线程不使用进程
  • Portability: Java 语言
  • Robust: Java
  • Secure: Java

Web Terminology 术语

https://www.javatpoint.com/web-terminology

Servlet container

Website: static vs dynamic

Server: Web vs Application

Content Type

相关包

  • javax.servlet
  • javax.servlet.http

Servlet 用途

  • 读取 client 发送 过来的数据

    • 显式的数据

      • html 表单
    • 隐式的数据

      • cookies
      • 媒体文件
      • 浏览器能识别的压缩文件
  • 处理数据,生成结果
  • 发送数据

    • 显式数据

      • 文本文件
  • html, xml

    • 二进制文件
  • gif

    • Excel
    • 隐式数据

      • 文档类型
      • 设置 cookies

Tomcat: 支持 Servlet 的服务器

环境搭建

https://www.runoob.com/servlet/servlet-environment-setup.html

jdk

Tomcat

  • 注意为 Tomcat 设置 java classpath

Servlet 生命周期

  • init()方法

    • 初始化
  • service() 方法

    • 已经固定,不要自己修改
    • 通过重写 doGet() 和 doPost() 等等 实现功能

      1
      2
      3
      4
      
      public void service(ServletRequest request, 
       ServletResponse response) 
       throws ServletException, IOException{
      }
      1
      2
      3
      4
      5
      
      public void doGet(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {
      // Servlet 代码
      }
  • destroy() 方法

    • 中止与关闭相关资源

      • 数据库连接
      • 后台线程
      • cookie 和 点击计数器写入磁盘
  • Java GC 回收 Servlet

运行架构

  1. Web Server 收到 Request
  2. Request 交给 Servlet Container
  3. Servlet Container

    • 第一次收到 Request 的情况下
  • 调用 Servlet 的 init()方法,启动一个 Servlet

    • 已经启动了 Servlet 和 第二次收到 Request
  • 为这个 Request 创建一个 Thread, 进行处理

Servlet 部署

手动部署 .class 文件

  • Servlet 放置位置

    • <Tomcat-installation-directory>/webapps/ROOT
    • <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes

      • 你的 Servlet 个人包 de 放置位置 com.myorg.MyServlet
  • 设置配置文件

    • 位置

      • <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/
  • 修改其中的 web.xml 文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
      <web-app>      
        <servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
        </servlet>
    
        <servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <!-- 设置URL -->
    <url-pattern>/HelloWorld</url-pattern>
        </servlet-mapping>
      </web-app>

使用 war 包