Servlets 简明教程

Servlets - Client HTTP Request

当浏览器请求一个网页时,它会向 Web 服务器发送很多无法直接读取的信息,因为这些信息作为 HTTP 请求标头的组成部分进行传输。您可以参阅 HTTP Protocol 以获得更多相关信息。

以下是来自浏览器端的重要标头信息,您将在 Web 编程中非常频繁地使用它们 −

Sr.No.

Header & Description

1

Accept 此标头指定浏览器或其他客户端可以处理的 MIME 类型。 image/pngimage/jpeg 的值是两种最常见的可能性。

2

Accept-Charset 此标头指定浏览器可用于显示信息的字符集。例如 ISO-8859-1。

3

Accept-Encoding 此标头指定浏览器知道如何处理的编码类型。 gzipcompress 的值是两种最常见的可能性。

4

Accept-Language 此标头指定客户端首选的语言(如果 Servlet 可以生成多种语言的结果)。例如,en、en-us、ru 等。

5

Authorization 客户端在访问受密码保护的网页时使用此标头来识别自己。

6

Connection 此标头表明客户端是否可以处理持久性 HTTP 连接。持久性连接允许客户端或其他浏览器使用单个请求来检索多个文件。 Keep-Alive 的值表示应使用持久性连接。

7

Content-Length 此标头仅适用于 POST 请求,并提供以字节为单位的 POST 数据的大小。

8

Cookie 此标头将 Cookie 返回给先前将它们发送到浏览器的服务器。

9

Host 此标头指定原始 URL 中给出的主机和端口。

10

If-Modified-Since 此标头表明仅当页面在指定日期后进行了更改时,客户端才需要该页面。如果没有任何较新的结果可用,则服务器将发送一个代码 304,表示 Not Modified 标头。

11

If-Unmodified-Since 此标头与 If-Modified-Since 相反;它指定仅当文档早于指定日期时,操作才应成功。

12

Referer 此标头指示引用网页的 URL。例如,如果您在网页 1 上,然后单击网页 2 的链接,则当浏览器请求网页 2 时,网页 1 的 URL 将包含在 Referrer 标头中。

13

User-Agent 此标头标识提出请求的浏览器或其他客户端,并且可用于将不同的内容返回到不同类型的浏览器。

Methods to read HTTP Header

可以在 servlet 程序中使用以下方法来读取 HTTP 标头。这些方法可用于 HttpServletRequest 对象

Sr.No.

Method & Description

1

Cookie[] getCookies() 返回一个包含客户端随此请求发送的所有 Cookie 对象的数组。

2

Enumeration getAttributeNames() 返回一个包含此请求中可用的属性名称的枚举。

3

Enumeration getHeaderNames() 返回此请求包含的所有标头名称的枚举。

4

Enumeration getParameterNames() 返回一个包含此请求中包含的参数名称的 String 对象的枚举

5

HttpSession getSession() 返回与此请求关联的当前会话,或者如果请求没有会话,则创建一个会话。

6

HttpSession getSession(boolean create) 返回与此请求关联的当前 HttpSession,或者如果没有当前会话且 create 的值为 true,则返回一个新会话。

7

Locale getLocale() 根据接受语言标头,返回客户端将接受内容的首选语言环境。

8

*Object getAttribute(String name) *以 Object 形式返回指定名称的属性的值,如果不存在具有指定名称的属性,则返回 null。

9

ServletInputStream getInputStream() 使用 ServletInputStream 以二进制数据形式检索请求正文。

10

String getAuthType() 返回用于保护 servlet 的身份验证方案的名称,例如,“BASIC”或“SSL”,或者如果没有保护 JSP,则返回 null。

11

String getCharacterEncoding() 返回此请求正文中使用的字符编码名称。

12

String getContentType() 返回请求正文的 MIME 类型,如果没有已知类型,则返回 null。

13

String getContextPath() 返回指示请求上下文的请求 URI 的一部分。

14

*String getHeader(String name) *以 String 形式返回指定请求标头值。

15

*String getMethod() *返回此请求所用 HTTP 方法的名称,例如,GET、POST 或 PUT。

16

String getParameter(String name) 以 String 形式返回请求参数的值,如果没有此参数,则返回 null。

17

String getPathInfo() 返回与客户端提出此请求时发送的 URL 关联的任何额外路径信息

18

*String getProtocol() *返回请求协议的名称和版本。

19

*String getQueryString() *返回路径之后包含在请求 URL 中的查询字符串。

20

String getRemoteAddr() 返回发送请求的客户端的 Internet 协议 (IP) 地址。

21

*String getRemoteHost() *返回发送请求的客户端的全限定名称。

22

*String getRemoteUser() *如果用户已经过身份验证,则返回发起该请求的用户的登录信息,如果用户尚未经过身份验证,则返回 null。

23

*String getRequestURI() *返回第一行 HTTP 请求中从协议名称到查询字符串部分的请求 URL 的部分。

24

String getRequestedSessionId() 返回客户端指定的会话 ID。

25

*String getServletPath() *返回调用 JSP 的请求 URL 的部分。

26

*String[] getParameterValues(String name) *返回包含给定请求参数所具有所有值的 String 对象数组,如果参数不存在,则返回 null。

27

*boolean isSecure() *返回一个布尔值,指明是否通过安全频道(例如 HTTPS)发出此请求。

28

*int getContentLength() *以字节为单位返回请求主体长度和输入流提供的长度,如果长度未知,则返回 -1。

29

int getIntHeader(String name) 以 int 返回指定请求头部的值。

30

int getServerPort() 返回接收此请求的端口号。

HTTP Header Request Example

以下是使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 头部信息的一个示例。此方法返回包含与当前 HTTP 请求相关联的头部的枚举。

一旦我们拥有枚举,我们就可以使用 hasMoreElements() 方法确定何时停止,并使用 nextElement() 方法获取每个参数名称标准方法循环执行枚举。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "HTTP Header Request Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
         "<th>Header Name</th><th>Header Value(s)</th>\n"+
         "</tr>\n"
      );

      Enumeration headerNames = request.getHeaderNames();

      while(headerNames.hasMoreElements()) {
         String paramName = (String)headerNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n");
         String paramValue = request.getHeader(paramName);
         out.println("<td> " + paramValue + "</td></tr>\n");
      }
      out.println("</table>\n</body></html>");
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

现在,调用上面的 servlet 将生成以下结果:

HTTP Header Request Example


Header Name
Header Value(s)


accept
*/*


accept-language
en-us


user-agent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)


accept-encoding
gzip, deflate


host
localhost:8080


connection
Keep-Alive


cache-control
no-cache