五 Http Servlet

在Servlet API 章节,我们已经谈到了一部分关于H他Http Servvlet 的一部分。在本篇文章中,我们更加细致地讨论Http Servlet.

 

不像GenericServlet, Http Servlet 不会重载service()方法,而是重载doGet(),doPost()方法,或者同时重载这两个方法。doGet()方法用于从服务器获取信息,doPost()方法发送信息到服务器。

 

在Http Servlet中,没有必要重载service()方法,因为这个方法分发http 请求的哦呵对应的处理方法中,例如,如果接收到Http Get请求,就分发此请求到doGet()方法。

 

Http Servlet 如何工作的?

正如你看到的下面的这张图,客户端(用户的浏览器)制造请求,这个请求可以是任意类型,例如是Get请求,Post请求,Head请求等,服务分发这些请求到servlet的service()方法。此方法分发这些请求到对应的处理者上,例如接收到Get请求,它就会分发请求到doGet()方法。

 

 

Http Servlet的继承关系

java.lang.Object

|_extended by javax.servlet.GenericServlet

      |_extended by javax.servlet.http.HttpServlet

 

我已经在Generic Servlet 章节说过了总是应该使用HttpServlet而不是GenericServlet。HttpServlet 是很容易使用的,比GenericServlet有更多的方法。

 

Http Servlet 例子

 

我们创建一个html文件,它将在我们点击这个页面上的链接时调用一次servlet.

<!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类创建了Http Servlet.

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

<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>

 

 

现在,我们的目录结构看起来像这个样子:

 

HttpServlet

   ├── index.html

        └── WEB-INF

├── classes

│           └── ExampleHttpServlet.java

└── web.xml

 

 

放到tomcat webapps目录器,

在classes编译java文件

启动tomcat

 

 

HttpServlet类中的方法

 

1) protected void doGet(HttpServletRequest req, HttpServletResponse resp): 这个方法被servlet的service()方法调用处理Http GET请求。当重载这个方法,读取请求数据,写响应头信息,获取response的writer或者输出流对象,最终写响应数据。

 

2) protected long getlastModified(HttpServletRequest res): 返回一个长整形指明HttpServletRequest对象最后修改时间。格林尼治时间1970年1月1日午夜后的毫秒,如果不知道时间,则为-1。

 

3) protected void doHead(HttpServletRequest req, HttpServletResponse resp): servlet服务方法调用此方法来处理来自客户端的HTTP头请求。当客户只希望查看响应的头信息(如内容类型或内容长度)时,就发送HEAD请求

 

4) protected void doPost(HttpServletRequest req, HttpServletResponse resp): servlet服务方法调用此方法来处理来自客户机的POST请求。HTTP POST方法允许客户端一次性向Web服务器发送无限长度的数据(但是浏览器实际上是做了限制),在向服务器发送信息时非常有用。与我们从服务器获取信息的doGet不同,当我们将信息从客户端传输到服务器时,将使用此方法。

 

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

 

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

 

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

 

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

 

9) rotected void service(HttpServletRequest req, HttpServletResponse resp): 不需要覆盖此方法,此方法从客户端接收HTTP请求并将其转发给相应的doXXX方法,如doGet()、doPost()、doHEAD()等。

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章