【Servlet】Servlet介绍

本文详细介绍了Servlet技术的核心概念,包括Servlet API的四个主要Java包及其功能,Servlet接口定义的关键方法和服务生命周期等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet是开发Servlet应用程序的主要技术。掌握Servlet API是成为Java Web高手的基础;Servlet API定义了70多种类型;

Servlet API 概述

Servlet API中有4个Java包,包括:

  1. javax.servlet:定义了Servlet与Servlet容器之间契约的类和接口;
  2. javax.servlet.http:定义包含HTTPServlet与Servlet容器之间的契约的类和接口;
  3. javax.servlet.annotation:包含对Servlet,Filter和Listener进行标注注解;还为标注元件指定的元数据
  4. javax.servlet.descriptor:定义为Web应用程序的配置信息提供编程式访问的类型;

javax.servlet包

Servlet技术的核心是Servlet接口,是所有Servlet类都必须直接或者间接实现的接口,当编写Servlet接口的Servlet类时候,直接实现它;当扩展一个实现这个接口的类时,则间接实现它;

Servlet接口定义了一个Servlet和Servlet容器之间的一个契约;这个契约归结起来就是:Servlet容器会把Servlet类加载到内存中,并在Servlet实例中调用特定的方法,在一个应用程序中,一个Servlet只有一个实例;

用户的请求会引发Servlet容器调用一个Servlet的service方法,并给这个方法传入一个ServletRequest实例和一个ServletResponse实例;ServletRequest封装当前Http请求,以便Servlet的开发者不必解析和操作原始的HTTP数据;ServletResponse表示当前用户HTTP响应,它的作用是使响应传送给用户更容易;

Servlet容器还未每个应用程序创建了一个ServletContext实例,这个对象封装context(应用程序)的环境细节;每个context只有一个ServletContext;每个Servlet实例还有一个封装的Servlet配置信息的ServletConfig;

先看一个Servlet接口:
Servlet定义的5中方法:

void init (ServletConfig config) throws ServletException;

void service(ServletRequest request,ServletResponse response) throws ServletException,java.io.IOException;

void destory();

java.lang.String  getServletInfo();

ServletConfig getServletConfig();

init,service和destory方法属于Servlet周期方法;Servlet容器将根据以下原则调用这三个方法:

init

:第一次请求Servlet时,Servlet容器就会调用这个方法,在后续的请求中,将不再调用这个方法;可以利用这个方法来编写一些应用程序初始化相关的代码;在调用这个方法时,Servlet容器会传递一个ServletConfig;一般来说,会将ServletConfig赋值给一个级类变量,一遍Servlet类中的其它的方法也可以使用这个对象;

service

:每次请求Servlet时,Servlet容器都会调用这个方法;多次使用;这个是核心方法,必须编写Servlet完成的相应代码、第一次请求Servlet时,Servlet容器会调用init方法和service方法,对于后续的请求,则只调用service方法;

destory

:要销毁Servlet容器时调用,通常发生在卸载应用程序,或者关闭Servlet容器的时候,一般来说,可以在这个方法中编写一些资源清理相关代码;

Servlet中另外两个方法是非生命周期的:getServletInfo和getServletConfig;

getServletInfo

:返回Servlet的描述;

getServletConfig

:返回Servlet容器传递给init方法的ServletConfig;但是,为了让getServletConfig返回值不为null,你需要为给init方法的ServletConfg赋一个类级变量;

最后,要注意线程安全,一个应用程序中所有的用户将共用一个Servlet实例,因此不建议使用类级变量,除非它们是只读的。或者是java.util.concurrent.atomic包中的成员,即原子类;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶洲川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值