sl 1.0 Servlet 简介

Servlet 简介

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

  • 性能明显更好。
  • Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
  • Servlet 是独立于平台的,因为它们是用 Java 编写的。
  • 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
  • Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

Servlet 架构

在这里插入图片描述

Servlet 任务

Servlet 执行以下主要任务:

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

Servlet 包

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

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

看 Servlet 接口:

注释才是最有价值的

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package javax.servlet;

import java.io.IOException;

/**
 * 定义所有servlet必须实现的方法。
 * <p>
 * servlet是在Web服务器中运行的小型Java程序。servlet
 * 接收和响应来自Web客户端的请求,通常是通过HTTP
 * 超文本传输协议。
 *
 * <p>
 *  要实现此接口,您可以编写扩展 <code>javax.servlet.GenericServlet<code> 的通用 servlet
 *  或扩展<code>javax.servlet.http.HttpServlet<code> 的 HTTP servlet。
 * <p>
 * 该接口定义了初始化 servlet、服务请求和从服务器中删除 servlet 的方法。这些被称为生命周期方法,按以下		 
 * 顺序调用:
 * <ol>
 * 1. servlet 被构造,然后用 <code>init<code> 方法初始化。
 * 2. 处理从客户端到 <code>service<code> 方法的任何调用。
 * 3. servlet 停止服务,然后使用 <code>destroy<code> 方法销毁,然后进行垃圾收集并完成。
 * </ol>
 *
 * <p>
 * 除了生命周期方法之外,该接口还提供了 <code>getServletConfig<code> 方法,servlet 可以使用它来获取任
 * 何启动信息,以及 <code>getServletInfo<code> 方法,它允许 servlet 返回关于自身的基本信息,例如作
 * 者、版本和版权。
 *
 * @see GenericServlet
 * @see javax.servlet.http.HttpServlet
 */
public interface Servlet {

    /**
     * 由 servlet 容器调用以向 servlet 指示该 servlet 正在投入使用。
     *
     * <p>
     * servlet 容器在实例化 servlet 后只调用一次 <code>init<code> 方法。 <code>init<code> 方法必须成
     * 功完成,servlet 才能接收任何请求。
     *
     * <p>
     * 如果 <code>init<code> 方法,servlet 容器不能将 servlet 置于服务中
     * <ol>
     * <li> 抛出一个 <code>ServletException<code>
     * <li> 在 Web 服务器定义的时间段内不返回
     * </ol>
     *
     *
     * @param config
     *           包含 servlet 的配置和初始化参数的 <code>ServletConfig<code> 对象
     *
     * @exception ServletException
     *                if an exception has occurred that interferes with the
     *                servlet's normal operation
     *
     * @see UnavailableException
     * @see #getServletConfig
     */
    public void init(ServletConfig config) throws ServletException;

    /**
     *
     * 返回一个 {@link ServletConfig} 对象,其中包含此 servlet 的初始化和启动参数。返回的 
     * <code>ServletConfig<code> 对象是传递给 <code>init<code> 方法的对象。
     *
     * <p>
     * 此接口的实现负责存储 <code>ServletConfig<code> 对象,以便此方法可以返回它。实现这个接口的 	
     * {@link GenericServlet} 类已经做到了这一点。
     *
     * @return 初始化此 servlet 的 <code>ServletConfig<code> 对象
     *
     * @see #init
     */
    public ServletConfig getServletConfig();

    /**
     * 由 servlet 容器调用以允许 servlet 响应请求。
     *
     * <p>
     * 此方法仅在 servlet 的 <code>init()<code> 方法成功完成后调用。
     *
     * <p>
     * 对于抛出或发送错误的 servlet,应始终设置响应的状态代码。
     * <p>
     * Servlet 通常在可以同时处理多个请求的多线程 servlet 容器中运行。开发人员必须注意同步对任何共享资
     * 源(例如文件、网络连接以及 servlet 的类和实例变量)的访问。 <a href 
     * ="http:java.sun.comSeriesTutorialjavathreadsmultithreaded.html">多线程编程的 Java 教程<a>中
     * 提供了有关 Java 多线程编程的更多信息。
     *
     *
     * @param req
     *            包含客户端请求的 <code>ServletRequest<code> 对象
     *
     * @param res
     *           包含 servlet 响应的 <code>ServletResponse<code> 对象
     *
     * @exception ServletException
     *                如果发生干扰 servlet 正常操作的异常
     *
     * @exception IOException
     *                if an input or output exception occurs
     */
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;

    /**
     * 返回有关 servlet 的信息,例如作者、版本和版权。
     *
     * <p>
     * 此方法返回的字符串应该是纯文本,而不是任何类型的标记(例如 HTML、XML 等)。
     *
     * @return a <code>String</code> containing servlet information
     */
    public String getServletInfo();

    /**
     * 由 servlet 容器调用以向 servlet 指示 servlet 正在停止服务。仅当 servlet 的 
     * <code>service<code> 
	 * 方法中的所有线程都退出或超时时间过后,才会调用此方法。 servlet 容器调用此方法后,不会在此 
	 * servlet 上再次调用 <code>service<code> 方法。
     *
     * <p>
     * 此方法使 servlet 有机会清理任何被占用的资源(例如,内存、文件句柄、线程),并确保任何持久状态与 
     * servlet 在内存中的当前状态同步。
     */
    public void destroy();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值