Servlet GenericServlet 类

来源:这里教程网 时间:2026-02-17 21:37:22 作者:

Servlet GenericServlet 类,在讨论 Servlet API 时,我已经讨论了一些关于GenericServlet的内容。在本文中,我将详细讨论GenericServlet。

GenericServlet是一个独立于协议的 Servlet,它应该始终覆盖service()方法来处理客户端请求。service()方法接受两个参数ServletRequest对象和ServletResponse对象。请求对象告诉 servlet 客户端发出的请求,而响应对象用于将响应返回给客户端。

GenericServlet如何工作?

GenericServlet的层次结构

java.lang.Object    |_extended byjavax.servlet.GenericServlet

GenericServlet是一个抽象类,它只有一个抽象方法,即service()。这就是为什么当我们通过扩展GenericServlet类来创建GenericServlet时,我们必须覆盖service()方法。

使用GenericServlet的优点:

    GenericServlet更容易编写具有简单的生命周期方法要编写GenericServlet,您只需要扩展javax.servlet.GenericServlet并覆盖service()方法(请查看下面的示例)。

使用GenericServlet的缺点:

使用GenericServlet并不是那么容易,因为我们在GenericServlet中没有像doGet(),doPost(),doHead()等方便的方法可以在HttpServlet中使用。
在HttpServlet中,我们需要为特定请求覆盖特定的便捷方法,例如,如果您需要获取信息,则覆盖doGet(),如果要向服务器发送信息覆盖doPost()。但是在GenericServlet中,我们只为每种类型的请求覆盖service()方法,这很麻烦。

我总是建议你使用HttpServlet而不是GenericServlet。HttpServlet更易于使用,并且具有比GenericServlet更多的方法。

GenericServlet的示例

我在这个例子中使用 Eclipse IDE。从 Eclipse 文件菜单中创建新的Dynamic Web Project。

我已经解释了在 Eclipse IDE 中创建 Servlet 的每一步,但是如果您刚接触 Eclipse 并且没有在系统上安装它,那么请参考本指南:如何安装 Eclipse,设置 Tomcat 并使用 Eclipse IDE运行第一个 servlet 程序

完成后,在 IDE 中创建以下所有文件后,项目结构(或层次结构)将如下所示。

index.htm

我们正在创建一个 html 文件,一旦我们点击网页上的链接就会调用 servlet。在WebContent文件夹中创建此文件。该文件的路径应如下所示:WebContent/index.html

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Generic Servlet Demo</title></head><body><a href="welcome">Click to call Servlet</a></body></html>

ExampleGeneric.java

现在,我们通过扩展GenericServlet类来创建GenericServlet。创建GenericServlet时,应始终覆盖service()方法。右键单击src文件夹并创建一个新的类文件,将该文件命名为ExampleGeneric。文件路径应如下所示:Java Resouces/src/default package/ExampleGeneric.java

import java.io.*;import javax.servlet.*;public class ExampleGeneric extends GenericServlet{ public void service(ServletRequest req,ServletResponse res)throws IOException,ServletException{   res.setContentType("text/html");   PrintWriter pwriter=res.getWriter();   pwriter.print("<html>");   pwriter.print("<body>");   pwriter.print("<h2>Generic Servlet Example</h2>");   pwriter.print("<p>Hello BeginnersBook Readers!</p>");   pwriter.print("</body>");   pwriter.print("</html>"); }}

web.xml

此文件可在此路径WebContent/WEB-INF/web.xml中找到。在此文件中,我们将使用特定 URL 映射 Servlet。由于我们在单击index.html页面上的链接时调用欢迎页面,因此我们将欢迎页面映射到我们上面创建的 Servlet 类。

<web-app><display-name>BeginnersBookServlet</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><servlet-name>MyGenericServlet</servlet-name><servlet-class>ExampleGeneric</servlet-class></servlet><servlet-mapping><servlet-name>MyGenericServlet</servlet-name><url-pattern>/welcome</url-pattern></servlet-mapping></web-app>

输出:

点击第一个屏幕中的链接后的屏幕:

GenericServlet类的方法:

以下是GenericServlet类的所有方法的列表。
1. public void init():这是一种方便的方法。可以重写此方法,因此无需调用super.init(config)。

    public void init(ServletConfig config):由 servlet 容器调用以指示 servlet 正在投入使用,此方法用于初始化 servlet。

    public String getInitParameter(String name):返回包含给定初始化参数值的String,如果参数不存在,则返回null。

    public Enumeration getInitParameterNames():返回web.xml文件中定义的所有参数的名称,如果web.xml没有任何参数,则返回null。

    public abstract void service(ServletRequest request, ServletResponse response):由 Servlet 容器调用,允许 servlet 响应客户端发出的请求。

    public void destroy():servlet 容器在 servlet 生命周期结束时调用一次,表明 servlet 正在被销毁。

    public ServletConfig getServletConfig():返回初始化此 servlet 的ServletConfig对象

    public String getServletInfo():返回有关 servlet 的信息。

    public ServletContext getServletContext():返回ServletContext对象,由init方法传递给这个 servlet

    public String getServletName():返回 servlet 实例的名称。

    public void log(String msg):在 servlet 日志文件中写入给定的消息。

    public void log(String msg, Throwable t):在 servlet 日志文件中写入解释性消息,包括描述错误或异常的String。

相关推荐