`

详解Servlet的父类HttpServlet类

阅读更多

13.3  HttpServlet类

HttpServlet类是一个抽象类,扩展了GenericServlet类。HttpServlet类用于创建一个适用于Web站点并支持HTTP协议的Servlet。一个HttpServlet的子类必须至少重载以下方法中的一个。

□ doGet()方法,适用于HTTP GET请求。

□ doPost()方法,适用于HTTP POST请求。

□ doPut()方法,适用于HTTP PUT请求。

□ doDelete()方法,适用于HTTP DELETE请求。

□ init()和destroy()方法,管理Servlet生命周期中的资源。

□ getServletInfo()方法,提供Servlet本身的信息。

HttpServlet类中的 getServletConfig()、getServletContext()、getServletInfo()、 getServletName()、log()等方法和GenericServlet类中的同名方法功能相同,本节不再介绍。

13.3.1  HttpServlet:构造函数

【基本语法】javax.servlet.http.HttpServlet类的构造函数如下:

public HttpServlet ( )

该构造函数什么也不做,因为该类是一个抽象类。

13.3.2  init方法:初始化Servlet

【功能说明】init()方法用于初始化Servlet,参见13.2.2小节。

13.3.3  service方法:处理客户端请求

【功能说明】service()方法用于处理客户端请求。

【基本语法】

protected void service (

    HttpServletRequest request,         //  指定HttpServletRequest对象,包含客户端请求

    HttpServletResponse response        //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

public void service (

    ServletRequest request,                //  指定HttpServletRequest对象,包含客户端请求

    ServletResponse response               //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

通常情况下不需要重载该方法。

13.3.4  destroy方法:销毁Servlet

【功能说明】destroy()方法用于销毁Servlet,参见13.2.4小节。

13.3.5  doGet方法:处理GET请求

【功能说明】doGet()方法用于处理HTTP的GET请求。

【基本语法】

protected void doGet (

    HttpServletRequest request,                 //  指定HttpServletRequest对象,包含客户端请求

    HttpServletResponse response                //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

重载doGet()方法可以支持HTTP的GET请求,同时自动支持HTTP的HEAD请求。HEAD请求是仅请求头部的GET请求。

在使用PrintWriter对象返回响应之前,最好先设置响应的内容类型和编码方式。如果请求的格式不正确,该方法将返回一个“HTTP BAD REQUEST”错误信息。

【实例演示】

package mil.zcz.jsp.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class WelcomeServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setContentType("text/html;charset=GB2312");

        PrintWriter out = response.getWriter();

        String user = request.getParameter("user");

        String msg = "Hi " + user + ", welcome to the servlet's world!";

        out.println(msg);

        out.close();

    }

}

在web.xml中添加以下代码:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

    version="2.4">

   

    <servlet>

        <servlet-name>WelcomeServlet</servlet-name>

        <servlet-class>mil.zcz.jsp.servlet.WelcomeServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>WelcomeServlet</servlet-name>

        <url-pattern>/Welcome</url-pattern>

    </servlet-mapping>

   

</web-app>

测试JSP页面welcome.jsp的源代码如下:

<html>

<head>

<title>Welcome</title>

</head>

<B>Please input your name:</B></br>

<form method="GET" action="/JSPBook/Welcome">

    <input type="TEXT" name="user" />

    <input type="SUBMIT" value="Submit" />

</form>

示例代码的执行效果如图13.3所示。

详解Servlet的父类HttpServlet类 - 24kljq - 24kljq

图13.3  使用HttpServlet的doGet方法

13.3.6  doPost方法:处理POST请求

【功能说明】doPost()方法用于处理HTTP的POST请求。

【基本语法】

protected void doPost (

    HttpServletRequest request,                 //  指定HttpServletRequest对象,包含客户端请求

    HttpServletResponse response         //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

在使用PrintWriter对象返回响应之前,最好先设置响应的内容类型和编码方式。如果请求的格式不正确,则该方法将返回一个“HTTP BAD REQUEST”错误信息。

【实例演示】

package mil.zcz.jsp.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class WelcomeServlet extends HttpServlet {

   

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setContentType("text/html;charset=GB2312");

        PrintWriter out = response.getWriter();      

        String user = request.getParameter("user");

        String msg = "Hi " + user + ", welcome to the servlet's world!";

        out.println(msg);

        out.close();

    }

   

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

       

        this.doGet(request, response);           //  调用doGet()方法

       

    }

}

将测试JSP页面welcome.jsp的源代码修改如下:

<B>Please input your name:</B></br>

<form method="POST" action="/JSPBook/Welcome">

    <input type="TEXT" name="user" />

    <input type="SUBMIT" value="Submit" />

</form>

示例代码的执行效果参见13.3.5小节。

13.3.7  doHead方法:处理HEAD请求

【功能说明】doHead()方法由service()方法调用,用于处理HTTP的HEAD请求。

【基本语法】

protected void doHead (

    HttpServletRequest request,            //  指定传递给Servlet的请求对象

    HttpServletResponse response         //  指定Servlet返回给客户端的HTTP头部

)

    throws ServletException, IOException

该方法不向客户端返回任何数据,仅仅返回包含内容长度的头部信息。如果请求的格式不正确,则该方法将返回一个“HTTP BAD REQUEST”错误信息。通常情况下不需要重载该方法。

13.3.8  doPut方法:处理PUT请求

【功能说明】doPut()方法由service()方法调用,用于处理HTTP的PUT请求。

【基本语法】

protected void doPut (

    HttpServletRequest request,                 //  指定HttpServletRequest对象,包含客户端请求

    HttpServletResponse response         //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

该方法允许客户端将文件放置到服务器上,类似于通过FTP发送文件。如果请求的格式不正确,则该方法将返回一个“HTTP BAD REQUEST”错误信息。通常情况下不需要重载该方法。

13.3.9  doDelete方法:处理DELETE请求

【功能说明】doDelete()方法由service()方法调用,用于处理HTTP的DELETE请求。

【基本语法】

protected void doDelete (

    HttpServletRequest request,                  //  指定HttpServletRequest对象,包含客户端请求

    HttpServletResponse response                 //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

该方法允许客户端请求从服务器上移除文档或页面。如果请求的格式不正确,则该方法将返回一个“HTTP BAD REQUEST”错误信息。通常情况下不需要重载该方法。

13.3.10  doTrace方法:处理TRACE请求

【功能说明】doTrace()方法由service()方法调用,用于处理HTTP的TRACE请求。

【基本语法】

protected void doTrace (

    HttpServletRequest request,                  //  指定HttpServletRequest对象,包含客户端请求

    HttpServletResponse response                 //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

该方法将产生一个响应,该响应包含所有在TRACE请求中发送的头部信息。通常情况下不需要重载该方法。

13.3.11  doOptions方法:处理OPTIONS请求

【功能说明】doOptions()方法由service()方法调用,用于处理HTTP的OPTIONS请求。

【基本语法】

protected void doOptions (

    HttpServletRequest request,                  //  指定HttpServletRequest对象,包含客户端请求

    HttpServletResponse response                 //  指定HttpServletResponse对象,包含Servlet的响应

)

    throws ServletException, IOException

该方法自动决定支持哪一种HTTP方法,并返回一个适当的头部。例如,如果Servlet重载了doGet()方法,doOptions()方法将返回以下头部:

Allow: GET, HEAD, TRACE, OPTIONS

通常情况下不需要重载该方法。

13.3.12  getInitParameter方法:获取初始化参数

【功能说明】getInitParameter()方法用于返回初始化参数的值,参见13.2.5小节。

13.3.13  getInitParameterNames方法:获取所有初始化参数名

【功能说明】getInitParameterNames()方法用于返回所有初始化参数的名称集合,参见13.2.6小节。

13.3.14  getLastModified方法:获取最后修改时间

【功能说明】getLastModified()方法用于返回HttpServletRequest对象的最后修改时间。

【基本语法】

protected long getLastModified (

    HttpServletRequest request             //  发送给Servlet的HttpServletRequest对象

)

该方法返回的时间为自GMT 1970年1月1日以来的毫秒数。默认情况下,该方法返回?1,标识最后修改时间未知。

为了支持GET操作,必须重载该方法,使浏览器和代理服务器更加有效地工作,减少装载服务器和网络资源。

分享到:
评论

相关推荐

    servlet生命周期演示代码

    ### Servlet 生命周期演示代码详解 #### 一、Servlet 生命周期概述 在深入分析代码之前,我们先来了解一下 Servlet 的生命周期。Servlet 的生命周期主要包括三个阶段:初始化 (`init` 方法)、请求处理 (`service` ...

    servlet生命周期

    - `GenericServlet` 是 `HttpServlet` 的父类,为开发者提供了更多的灵活性,可以在此基础上扩展自己的Servlet。 4. **HttpServlet抽象类**:继承自`GenericServlet`,提供了默认的服务实现,包括处理HTTP GET和...

    jsp+java类+servlet实现文件读取、写入的功能.pdf

    该类继承自`HttpServlet`,并在其中实现了对文件的操作逻辑。 - **初始化**: - 方法签名:`public void init(ServletConfig config) throws ServletException` - 功能:初始化Servlet时获取`ServletContext`对象...

    Head_First_Servlet_and_JSP_筆記.pdf

    ##### HttpServlet类 - **HttpServlet**继承自`GenericServlet`,为处理HTTP协议的请求提供了一组更具体的方法。 - **service(HttpServletRequest,HttpServletResponse)**: 这个方法重写了父类中的`service`方法,...

    JSP开发Servlet重写init()方法实例详解

    如果选择重写`init(ServletConfig config)`,则必须确保调用`super.init(config)`,以便将配置信息正确地传递给父类,否则Servlet可能无法正确地获取其配置信息。 以下是如何重写这两种`init()`方法的示例: ```...

    java abstract class interface之间的区别介绍

    ### Java抽象类与接口的区别详解 #### 基本概念 在Java编程语言中,抽象类(abstract class)和接口(interface)都是用于实现抽象化的重要工具,它们可以帮助程序员更好地组织代码,提高代码的可复用性和扩展性。...

    getHtmlServlet

    ### getHtmlServlet 类详解 #### 一、类概述 `getHtmlServlet` 是一个自定义的Servlet类,位于 `com.lin.servlet` 匟能够处理HTTP请求。此类通过继承 `HttpServlet` 类并重写其中的方法来实现特定的功能,主要包括...

    北大青鸟5.0二期笔试试题(11月份有答案)

    7. Servlet的父类:在Java Web开发中,如果一个Servlet重写了`doGet()`和`doPost()`方法,那么它的父类可能是`HttpServlet`。 8. ASP.NET AJAX框架:ASP.NET AJAX框架中的Tabs控件用于实现选项卡功能,选项d)正确。...

    最新各大公司企业真实面试题-新锐公司面试题

    - **实现方式:** 实现`javax.servlet.Servlet`接口或继承`javax.servlet.http.HttpServlet`类。 ### 6. JDBC 连接 Oracle 数据库 **标题与描述中的关键词:** `JDBC`, `Oracle` #### 详解: - **JDBC (Java ...

    根据一个JSP文件实例看下九个隐藏对象.pdf

    #### 二、`HttpJspBase`类详解 在JSP页面中,`HttpJspBase`类是一个重要的组成部分,它是所有JSP页面背后默认继承的基类之一。下面我们将详细介绍`HttpJspBase`类及其核心功能: 1. **类定义**: ```java public...

    JAVA面试笔试题汇总-4

    #### 一、Servlet生命周期及方法详解 ##### 1. `public void init(ServletConfig config)` - **说明**:`init()` 方法是 Servlet 生命周期中的初始化方法,当 Servlet 第一次被加载时调用。该方法用于完成 Servlet...

    Java使用IOC控制反转的三种设计模式详解

    在上面的例子中,我们定义了一个抽象类 HttpServlet,它提供了一个 service() 方法来处理 HTTP 请求,然后我们定义了一个子类 MyServlet,它实现了 doGet() 方法。 IOC 模式是一种非常有用的设计模式,它可以帮助...

    惠普 HP笔试题/口试题

    1. HttpServlet 的生命周期:Servlet 是 Java Web 开发中的重要组件,它扩展了 javax.servlet.http.HttpServlet 类。生命周期包括初始化、服务、销毁三个阶段。初始化阶段通过 init() 方法进行,服务阶段处理客户端...

    java判断试题.pdf

    HttpServlet 类的 `doGet()` 方法 **知识点**: `doGet()` 方法用于处理 HTTP GET 请求。 **解析**: 正确。`doGet()` 方法可能抛出 `ServletException` 和 `IOException`。这两个异常都是在处理 HTTP 请求过程中...

    JAVAEE笔记

    - **Servlet接口实现类**:通常通过继承HttpServlet类并重写doGet/doPost方法来实现。 - **Servlet的一些细节**: - **初始化参数**:可以在部署描述文件(web.xml)中为Servlet设置初始化参数。 - **线程安全**:...

    jsp笔记1

    这个生成的Java类继承自`Httpjspbase`,而`Httpjspbase`类又间接继承自`HttpServlet`。因此,JSP页面翻译后实际上是一个实现了Servlet接口的类。 ### JSP的`page`指令 `page`指令用于设置JSP页面的一些关键属性和...

    getHtmlServlet_javaBygetHtml

    本文将详细介绍一个名为 `getHtmlServlet` 的 Java 类,该类继承自 `HttpServlet` 并实现了一些基本的功能,主要包括处理文件上传、获取指定目录下的文件列表以及获取 HTML 文件的内容。 #### 二、类结构与初始化 ...

Global site tag (gtag.js) - Google Analytics