目录

Servlets - 客户请求( Client Request)

当浏览器请求网页时,它会向Web服务器发送大量信息,这些信息无法直接读取,因为此信息作为HTTP请求标头的一部分传播。 您可以检查HTTP协议以获取更多信息。

以下是来自浏览器端的重要标题信息,您将在网络编程中经常使用 -

Sr.No. 标题和说明
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

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

读取HTTP标头的方法

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

Sr.No. 方法和描述
1

Cookie[] getCookies()

返回一个数组,其中包含客户端使用此请求发送的所有Cookie对象。

2

Enumeration getAttributeNames()

返回包含此请求可用属性名称的Enumeration。

3

Enumeration getHeaderNames()

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

4

Enumeration getParameterNames()

返回String对象的Enumeration,其中包含此请求中包含的参数的名称

5

HttpSession getSession()

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

6

HttpSession getSession(boolean create)

返回与此请求关联的当前HttpSession,如果没有当前会话且create的值为true,则返回新会话。

7

Locale getLocale()

根据Accept-Language标头返回客户端将接受内容的首选区域设置。

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

将此请求的URL部分从协议名称返回到HTTP请求第一行中的查询字符串。

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标头请求示例

以下是使用HttpServletRequest的getHeaderNames()方法读取HTTP头信息的示例。 此方法返回一个Enumeration,其中包含与当前HTTP请求关联的标头信息。

一旦我们有了Enumeration,我们就可以以标准方式循环Enumeration,使用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会产生以下结果 -

<h1 align="center">HTTP Header Request Example</h1>
标题名称 标题值
accept*/*
accept-languageen-us
user-agent Mozilla/4.0(兼容; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encodinggzip, deflate
hostlocalhost:8080
connectionKeep-Alive
cache-controlno-cache
↑回到顶部↑
WIKI教程 @2018