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所示。
图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 的生命周期主要包括三个阶段:初始化 (`init` 方法)、请求处理 (`service` ...
- `GenericServlet` 是 `HttpServlet` 的父类,为开发者提供了更多的灵活性,可以在此基础上扩展自己的Servlet。 4. **HttpServlet抽象类**:继承自`GenericServlet`,提供了默认的服务实现,包括处理HTTP GET和...
该类继承自`HttpServlet`,并在其中实现了对文件的操作逻辑。 - **初始化**: - 方法签名:`public void init(ServletConfig config) throws ServletException` - 功能:初始化Servlet时获取`ServletContext`对象...
##### HttpServlet类 - **HttpServlet**继承自`GenericServlet`,为处理HTTP协议的请求提供了一组更具体的方法。 - **service(HttpServletRequest,HttpServletResponse)**: 这个方法重写了父类中的`service`方法,...
如果选择重写`init(ServletConfig config)`,则必须确保调用`super.init(config)`,以便将配置信息正确地传递给父类,否则Servlet可能无法正确地获取其配置信息。 以下是如何重写这两种`init()`方法的示例: ```...
### Java抽象类与接口的区别详解 #### 基本概念 在Java编程语言中,抽象类(abstract class)和接口(interface)都是用于实现抽象化的重要工具,它们可以帮助程序员更好地组织代码,提高代码的可复用性和扩展性。...
### getHtmlServlet 类详解 #### 一、类概述 `getHtmlServlet` 是一个自定义的Servlet类,位于 `com.lin.servlet` 匟能够处理HTTP请求。此类通过继承 `HttpServlet` 类并重写其中的方法来实现特定的功能,主要包括...
- **实现方式:** 实现`javax.servlet.Servlet`接口或继承`javax.servlet.http.HttpServlet`类。 ### 6. JDBC 连接 Oracle 数据库 **标题与描述中的关键词:** `JDBC`, `Oracle` #### 详解: - **JDBC (Java ...
#### 二、`HttpJspBase`类详解 在JSP页面中,`HttpJspBase`类是一个重要的组成部分,它是所有JSP页面背后默认继承的基类之一。下面我们将详细介绍`HttpJspBase`类及其核心功能: 1. **类定义**: ```java public...
#### 一、Servlet生命周期及方法详解 ##### 1. `public void init(ServletConfig config)` - **说明**:`init()` 方法是 Servlet 生命周期中的初始化方法,当 Servlet 第一次被加载时调用。该方法用于完成 Servlet...
在上面的例子中,我们定义了一个抽象类 HttpServlet,它提供了一个 service() 方法来处理 HTTP 请求,然后我们定义了一个子类 MyServlet,它实现了 doGet() 方法。 IOC 模式是一种非常有用的设计模式,它可以帮助...
1. HttpServlet 的生命周期:Servlet 是 Java Web 开发中的重要组件,它扩展了 javax.servlet.http.HttpServlet 类。生命周期包括初始化、服务、销毁三个阶段。初始化阶段通过 init() 方法进行,服务阶段处理客户端...
HttpServlet 类的 `doGet()` 方法 **知识点**: `doGet()` 方法用于处理 HTTP GET 请求。 **解析**: 正确。`doGet()` 方法可能抛出 `ServletException` 和 `IOException`。这两个异常都是在处理 HTTP 请求过程中...
- **Servlet接口实现类**:通常通过继承HttpServlet类并重写doGet/doPost方法来实现。 - **Servlet的一些细节**: - **初始化参数**:可以在部署描述文件(web.xml)中为Servlet设置初始化参数。 - **线程安全**:...
这个生成的Java类继承自`Httpjspbase`,而`Httpjspbase`类又间接继承自`HttpServlet`。因此,JSP页面翻译后实际上是一个实现了Servlet接口的类。 ### JSP的`page`指令 `page`指令用于设置JSP页面的一些关键属性和...
本文将详细介绍一个名为 `getHtmlServlet` 的 Java 类,该类继承自 `HttpServlet` 并实现了一些基本的功能,主要包括处理文件上传、获取指定目录下的文件列表以及获取 HTML 文件的内容。 #### 二、类结构与初始化 ...