Servlet的一些基础内容

本文主要是一些关于Servlet的接口和方法的说明


Servlet 是什么?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。我们可以使用Servlet接收网页表单的用户输入,呈现数据库或者其他源的记录,还可以动态创建网页。

Servlet的实现

Servlet是通过接口来实现,那因为是实现Servlet接口,所以我们就需要实现接口里对应的方法。Servlet所提供的一系列规范,让软件可以在不同服务器上运行。

规范了可以实现的接口、类以及配置环境。

定义所有 servlet 都必须实现的方法。

servlet 是运行在 Web 服务器中的小型 Java 程序。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

要实现此接口,可以编写一个扩展 javax.servlet.GenericServlet 的一般 servlet,或者编写一个扩展 javax.servlet.http.HttpServlet 的 HTTP servlet。

此接口定义了初始化 servlet 的方法、为请求提供服务的方法和从服务器移除 servlet 的方法。这些方法称为生命周期方法,它们是按以下顺序调用的:

  1. 构造 servlet,然后使用 init 方法将其初始化。
  2. 处理来自客户端的对 service 方法的所有调用。
  3. 从服务中取出 servlet,然后使用 destroy 方法销毁它,最后进行垃圾回收并终止它。

除了生命周期方法之外,此接口还提供了 getServletConfig 方法和 getServletInfo 方法,servlet 可使用前一种方法获得任何启动信息,而后一种方法允许 servlet 返回有关其自身的基本信息,比如作者、版本和版权。

我们来看看servlet内部可以实现的方法有哪些吧。

public void init(ServletConfig config) throws ServletExcepetion

由 servlet 容器调用,指示将该 servlet 放入服务。

servlet 容器仅在实例化 servlet 之后调用 init 方法一次。在 servlet 可以接收任何请求之前,init 方法必须成功完成。

servlet 容器无法将 servlet 放入服务,如果 init 方法:

  1. 抛出 ServletException
  2. 未在 Web 服务器定义的时间段内返回
config包含 servlet 的配置和初始化参数的 ServletConfig 对象
ThrowsServletExcepetion: 如果发生妨碍 servlet 正常操作的异常

init顾名思义,就算初始化,config是计算机配置的意思,所以我们可以用这个方法初始化配置。 

public ServletConfig getServletConfig()

返回 ServletConfig 对象,该对象包含此 servlet 的初始化和启动参数。返回的 ServletConfig 对象是传递给  init 方法的对象。

此接口的实现负责存储 ServletConfig 对象,以便此方法可以返回该对象。实现此接口的 GenericServlet类 已经这样做了。

return初始化此 servlet 的 ServletConfig 对象

这个方法可以返回包含servlet的初始化与启动参数的对象。

public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException

由 servlet 容器调用,以允许 servlet 响应某个请求。

此方法仅在 servlet 的 init() 方法成功完成之后调用。

应该为抛出或发送错误的 servlet 设置响应的状态代码。

servlet 通常运行在可同时处理多个请求的多线程 servlet 容器中。开发人员必须知道要同步对所有共享资源(比如文件、网络连接以及 servlet 的类和实例变量)的访问。

req包含客户端请求的 ServletRequest 对象
res包含 servlet 的响应的 ServletResponse 对象
ThrowsServletException: 如果发生妨碍 servlet 正常操作的异常
Throwsjava.io.IOException: 如果发生输入或输出异常

public String getServletInfo()

返回有关 servlet 的信息,比如作者、版本和版权。

此方法返回的字符串应该是纯文本,不应该是任何种类的标记(比如 HTML、XML,等等)。

return包含 servlet 信息的 String

public void destroy()

由 servlet 容器调用,指示将从服务中取出该 servlet。此方法仅在 servlet 的 service 方法已退出或者在过了超时期之后调用一次。在调用此方法之后,servlet 容器不会再对此 servlet 调用 service 方法。

此方法为 servlet 提供了一个清除持有的所有资源(比如内存、文件句柄和线程)的机会,并确保任何持久状态都与内存中该 servlet 的当前状态保持同步。

以上这些就servlet接口中所包含的方法。 

GenericServlet

直接编写Servlet的话,太过复杂,每次都得重写虽有方法,所以用GenericServlet抽象类,继承给Servlet,大大减少重写的代码量。

GenericServlet 实现 ServletServletConfig 接口。servlet 可以直接扩展 GenericServlet,尽管扩展特定于协议的子类(比如 HttpServlet)更为常见。

GenericServlet 使编写 servlet 变得更容易。它提供生命周期方法 initdestroy 的简单版本,以及 ServletConfig 接口中的方法的简单版本。GenericServlet 还实现 log 方法,在 ServletContext 接口中对此进行了声明。

要编写一般的 servlet,只需重写抽象 service 方法即可。

以下就是其中的一些方法:

public void destroy()

由 servlet 容器调用,指示将从服务中取出的 servlet。

public String getInitParameter(String name)

返回包含指定初始化参数的值的 String,如果参数不存在,则返回 null

提供此方法是为了方便使用。该方法从 servlet 的 ServletConfig 对象获取指定参数的值。

name指定初始化参数名称的 String
returnString 包含初始化参数值的 String

public java.util.Enumeration<E> getInitParameterNames()
String 对象的 Enumeration 的形式返回 servlet 的初始化参数的名称,如果 servlet 没有初始化参数,则返回一个空的 Enumeration

提供此方法是为了方便使用。该方法从 servlet 的 ServletConfig 对象获取参数名称。

returnEnumeration 包含 servlet 初始化参数名称的 String 对象的枚举

public ServletConfig getServletConfig()

返回此 servlet 的 ServletConfig 对象。
returnServletConfig 初始化此 servlet 的 ServletConfig 对象

public ServletContext getServletContext()

返回对此 servlet 在其中运行的 ServletContext的引用。

提供此方法是为了方便使用。该方法从 servlet 的 ServletConfig 对象获取上下文。

returnServletContext 通过 init 方法传递给此 servlet 的 ServletContext 对象

public String getServletInfo()

返回有关 servlet 的信息,比如作者、版本和版权。默认情况下,此方法返回一个空字符串。重写此方法使其返回有意义的值。
returnString 有关此 servlet 的信息,默认情况下是一个空字符串

public void init(ServletConfig config) throws ServletException

由 servlet 容器调用,指示将放入服务中的 servlet。

此实现存储它从 servlet 容器中获得的 ServletConfig 对象,以便将来使用。在重写方法的这种形式时,调用 super.init(config)

config包含此 servlet 的配置信息的 ServletConfig 对象
ThrowsServletException: 如果发生中断 servlet 正常操作的异常

public void init() throws ServletException

可重写的便捷方法,这样就不必调用 super.init(config)

不用重写 #init(ServletConfig),只需重写此方法即可,它由 GenericServlet.init(ServletConfig config) 调用。仍然可以通过 #getServletConfig 获取 ServletConfig 对象。

ThrowsServletException: 如果发生中断 servlet 正常操作的异常

public void log(String msg)

将前置有 servlet 名称的指定消息写入 servlet 日志文件。
msg指定要写入日志文件的消息的 String

public void log(String message, Throwable t)

将前置有 servlet 名称的给定 Throwable 异常的解释性消息和堆栈跟踪写入 servlet 日志文件。
message描述错误或异常的 String
tjava.lang.Throwable 错误或异常

abstract public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException

由 servlet 容器调用,以允许 servlet 响应某个请求。

此方法已声明为抽象方法,因此子类(比如 HttpServlet)必须重写它。

req包含客户端请求的 ServletRequest 对象
res将包含 servlet 的响应的 ServletResponse 对象
ThrowsServletException: 如果发生妨碍 servlet 正常操作的异常
Throwsjava.io.IOException: 如果发生输入或输出异常

public String getServletName()

返回此 servlet 实例的名称。
return此 servlet 实例的名称

 相信看了这些方法,一定能加深你对Servlet的config、context等的理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值