当前位置:首页 » Servlets » Servlet客户端HTTP请求

Servlet客户端HTTP请求

Servlets客户端的HTTP请求实例代码 - 当浏览器请求的Web页时,它发送特定信息不能被直接读取,因为此信息的传输作为HTTP请求的标头的一部分到Web服务器。

当浏览器请求的Web页时,它发送特定信息不能被直接读取,因为此信息的传输作为HTTP请求的标头的一部分到Web服务器。您可以查看HTTP协议的更多信息。

以下是来自于浏览器端,你会在网络编程中使用非常频繁的重要头信息:

头信息 描述
Accept 这个头指定浏览器或其他客户端可以处理的MIME类型。image/PNG和image/JPEG是最常见的两种的可能
Accept-Charset 这个头指定的字符集的浏览器可以使用它来显示信息。例如ISO-8859-1。
Accept-Encoding 这个头指定的编码类型,浏览器知道如何处理。gzip压缩或compressare最常见的两种的可能的值。
Accept-Language 这个头指定客户端的首选语言的情况下,servlet可以在一个以上的语言产生的结果。例如,en,EN-US等。
Authorization 这头用于客户端识别自己的身份访问受密码保护的网页。
Connection 此标头指示客户端是否可以处理持久HTTP连接。持久连接允许客户端或其他浏览器,在单个请求来检索多个文件。值保持活动的方式,持续的连接应使用
Content-Length 此头是只适用于POST请求,并给出的POST数据的大小(以字节为单位)。
Cookie 这头返回到服务器以前发送到浏览器的cookie。
Host 这个头指定的主机和端口,在原来的URL。
If-Modified-Since 这头表示客户端想要的页面,只有当它在指定的日期后已更改。服务器发送一个代码,304表示不修改的头,如果没有新的结果可以使用。
If-Unmodified-Since 这头是相反的If-Modified-Since的,它指定的操作应该会成功,如果该文件是早于指定日期。
Referer 此标头指示的Web页的URL。例如,如果你在网页1,点击一个链接到网页2,Referer标头中包含的网页的URL是当浏览器请求的网页2。
User-Agent 此标头识别提出请求的浏览器或其他客户端,并可以使用不同类型的浏览器返回不同的内容。

读取HTTP头的方法:

有以下的方法,它们可以被用来读取HTTP报头中的Servlet程序。这些方法可与HttpServletRequest对象。

S.N. 方法& 描述
1 Cookie[] getCookies()
返回一个数组,包含所有的Cookie对象的客户端发送此请求。
2 Enumeration getAttributeNames()
返回一个枚举,其中包含的属性,提供给此请求的名称。
3 Enumeration getHeaderNames()
返回一个枚举这个请求包含所有的头名。
4 Enumeration getParameterNames()
返回一个枚举的String对象,包含在该请求中包含的参数的名称。
5 HttpSession getSession()
返回与此请求关联的当前会话,或者如果请求没有会话,创建一个。
6 HttpSession getSession(boolean create)
返回与此请求关联的HttpSession中,如果如果没有当前会话,并创建是真实的,则返回一个新的会话。.
7 Locale getLocale()
返回的首选区域设置,客户端将接受的内容,根据Accept-Language头
8 Object getAttribute(String name)
返回值的命名属性的对象,如果没有给定名称的属性存在,则返回null。
9 ServletInputStream getInputStream()
检索请求主体的二进制数据,使用一个ServletInputStream。
10 String getAuthType()
返回的身份验证方案,用于保护的servlet的名称,例如,“基本”或“SSL”,则返回null,如果JSP没有受到保护
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)
返回值的请求参数为字符串,或者为null,如果该参数不存在。
17 String getPathInfo()
提出这个要求时,客户端发送的URL返回任何额外的路径信息。
18 String getProtocol()
返回的名称和版本的协议的请求。
19 String getQueryString()
返回的查询字符串中包含请求的URL路径之后。
20 String getRemoteAddr()
返回的互联网协议(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)
返回一个数组,包含所有给定的请求参数的值,则返回null,如果该参数不存在的String对象。
27 boolean isSecure()
返回一个布尔值,指示是否要求使用安全通道,如HTTPS。
28 int getContentLength()
返回的长度,以字节为单位,请求体,并提供输入流,或如果长度不知道时为-1
29 int getIntHeader(String name)
返回指定的请求头为一个int值。
30 int getServerPort()
返回的端口号上接收到这个请求。

HTTP头请求示例:

下面的例子使用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 - by www.gitbook.net
      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 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