Servlets - 客户端HTTP请求

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

以下是重要的标题信息它来自浏览器端,你会非常频繁地使用网络编程和减号;

Sr .No.标题&描述
1

接受

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

2

Accept-Charset

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

3

接受编码

此标头指定浏览器的编码类型知道如何处理.值 gzip 压缩是两种最常见的可能性.

4

接受语言

此标头指定客户端的首选语言,以防servlet以多种语言生成结果.例如en,en-us,ru等

5

授权

客户使用此标头标识自己访问受密码保护的网页时.

6

连接

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

7

内容长度

此标头仅适用于POST请求,并以字节为单位给出POST数据的大小.

8

Cookie

此标头将cookie返回给先前已将其发送到浏览器的服务器.

9

主机

此标头指定原始网址中给出的主机和端口.

10

If-Modified-Since

此标题表示客户端仅在指定日期之后更改页面时才想要页面.如果没有更新的结果,服务器发送代码304,这意味着未修改标题.

11

If-Unmodified-Since

此标题与If-Modified-Since相反;它指定只有在文档早于指定日期时操作才会成功.

12

Referer

此标题表示引用网页的URL.例如,如果您在网页1并单击指向网页2的链接,则当浏览器请求网页2时,网页1的URL将包含在Referrer标题中.

13

用户代理

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

读取HTTP标头的方法

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

Sr.No .方法&描述
1

Cookie [] getCookies()

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

2

Enumeration getAttributeNames()

返回一个Enumeration,其中包含此请求可用的属性名称.

3

Enumeration getHeaderNames()

返回此请求包含的所有标题名称的枚举.

4

Enumeration getParameterNames()

返回包含此请求中包含的参数名称的String对象的枚举

5

HttpSession getSession()

返回当前关联的会话如果请求没有会话,请创建一个.

6

HttpSession getSession(boolean create)

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

7

Locale getLocale()

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

8

Object getAttribute(字符串名称)

返回值作为Object的named属性,如果不存在给定名称的属性,则为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)

返回值将指定的请求标头作为字符串.

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

返回互联网协议( 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()

返回长度,in请求体的字节,由输入流提供,如果长度未知,则为-1.

29

int getIntHeader(String name)

返回值将指定的请求标头作为int.

30

int getServerPort()

返回端口号该请求已收到.

HTTP标头请求示例

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

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

HTTP Header Request ExampleHeader NameHeader Value(s)accept*/*accept-languageen-ususer-agentMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)accept-encodinggzip, deflatehostlocalhost:8080connectionKeep-Alivecache-controlno-cache