Servlet HttpServlet类

Servlet API 中,我对HttpServlet进行了一些讨论。在本文中,我将详细讨论HttpServlet

GenericServlet不同,HTTPServlet不会覆盖service()方法。相反,它会覆盖doGet()方法或doPost()方法或两者。doGet()方法用于从服务器获取信息,而doPost()方法用于向服务器发送信息。

HttpServlet中,不需要覆盖service()方法,因为此方法将 Http 请求分派给正确的方法处理程序,例如,如果它接收到 HTTP GET请求,则会将请求分派给doGet()方法。

HttpServlet 如何工作?

正如您在下图中看到的那样,客户端(用户的浏览器)发出请求。这些请求可以是任何类型,例如 – GET请求,POST请求,HEAD请求等。服务器将这些请求分派给 servlet 的service()方法,此方法将这些请求分派给正确的处理程序,例如,如果它接收到Get请求它将其分派给doGet()方法。

Servlet HttpServlet类

HttpServlet的层次结构

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

我已经在GenericServlet中讨论过你应该总是使用HttpServlet而不是GenericServletHttpServlet更易于使用,并且具有比GenericServlet更多的方法。

HttpServlet的例子

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

我已经解释了在 Eclipse IDE 中创建 Servlet 的所有步骤,但是如果您不熟悉 Eclipse 并且没有在系统上安装它,请参考本指南:如何安装 Eclipse,配置 tomcat 并使用 Eclipse 运行第一个 Servlet 应用

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

Servlet HttpServlet类

index.html

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

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

ExampleHttpServlet.java

现在,我们通过扩展HttpServlet类来创建一个HttpServlet。右键单击src文件夹并创建一个新的类文件,将该文件命名为ExampleHttpServlet。文件路径应如下所示:Java Resources/src/default package/ExampleHttpServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Creating Http Servlet by Extending HttpServlet class
public class ExampleHttpServlet extends HttpServlet 
{    
    private String mymsg;
    public void init() throws ServletException 
    {      
       mymsg = "Http Servlet Demo";   
    }
    public void doGet(HttpServletRequest request, 
        HttpServletResponse response) throws ServletException, 
        IOException 
    {            
        // Setting up the content type of web page      
        response.setContentType("text/html");
        // Writing the message on the web page      
        PrintWriter out = response.getWriter();      
        out.println("<h1>" + mymsg + "</h1>");      
        out.println("<p>" + "Hello Friends!" + "</p>");   
    }
    public void destroy() 
    {      
       // Leaving empty. Use this if you want to perform  
       //something at the end of Servlet life cycle.   
    }
}

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>MyHttpServlet</servlet-name>
<servlet-class>ExampleHttpServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>MyHttpServlet</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>

</web-app>

运行项目:

右键单击index.html,在服务器上运行。

输出:

Servlet HttpServlet类

单击链接后,您将看到此屏幕:

Servlet HttpServlet类

HttpServlet类的方法

  1. protected void doGet(HttpServletRequest req, HttpServletResponse resp):这个方法由 servlet service方法调用,以处理来自客户端的 HTTP GET请求。覆盖此方法时,请读取请求数据,编写响应头,获取响应的编写器或输出流对象,最后编写响应数据。

  2. protected long getLastModified(HttpServletRequest req):返回一个长整数,指定上次修改HttpServletRequest对象的时间,格林威治标准时间 1970 年 1 月 1 日午夜(以秒为单位),如果时间不知道,则返回 -1

  3. protected void doHead(HttpServletRequest req, HttpServletResponse resp):这个方法由 servlet service方法调用,以处理来自客户端的 HTTP HEAD请求。当客户端想要仅查看响应的标头(例如Content-TypeContent-Length)时,它会发送HEAD请求

  4. protected void doPost(HttpServletRequest req, HttpServletResponse resp):servlet service方法调用此方法来处理来自客户端的POST请求。 HTTP POST方法允许客户端一次性向 Web 服务器发送无限长度的数据,并且在向服务器发布信息时非常有用。与doGet不同,我们从服务器获取信息时,在从客户端向服务器传输信息时使用此方法。

  5. protected void doPut(HttpServletRequest req, HttpServletResponse resp):这个方法由 servlet service方法调用,以处理来自客户端的PUT请求。此方法类似于doPost方法,但与我们向服务器发送信息的doPost方法不同,此方法将文件发送到服务器,这类似于从客户端到服务器的 FTP 操作。

  6. protected void doDelete(HttpServletRequest req, HttpServletResponse resp):由 servlet service()方法调用,以处理来自客户端的DELETE请求,允许客户端从服务器删除文档,网页或信息。

  7. protected void doOptions(HttpServletRequest req, HttpServletResponse resp):由service方法调用,以允许 servlet 处理OPTIONS请求。OPTIONS请求确定服务器支持哪些 HTTP 方法并返回适当的标头。

  8. protected void doTrace(HttpServletRequest req, HttpServletResponse resp):此方法由service()方法调用,用于处理TRACE请求。用于调试目的。

  9. protected void service(HttpServletRequest req, HttpServletResponse resp):没有必要覆盖此方法,此方法从客户端接收 HTTP 请求并将它们转发到相应的 doXXX 方法,如doGet()doPost()doHEAD()

  10. public void service(ServletRequest req, ServletResponse res):将客户端请求转发给受保护的service方法。也没有必要重写此方法。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程