Servlets 简明教程
Servlets - Client HTTP Request
当浏览器请求一个网页时,它会向 Web 服务器发送很多无法直接读取的信息,因为这些信息作为 HTTP 请求标头的组成部分进行传输。您可以参阅 HTTP Protocol 以获得更多相关信息。
以下是来自浏览器端的重要标头信息,您将在 Web 编程中非常频繁地使用它们 −
Sr.No. |
Header & Description |
1 |
Accept 此标头指定浏览器或其他客户端可以处理的 MIME 类型。 image/png 或 image/jpeg 的值是两种最常见的可能性。 |
2 |
Accept-Charset 此标头指定浏览器可用于显示信息的字符集。例如 ISO-8859-1。 |
3 |
Accept-Encoding 此标头指定浏览器知道如何处理的编码类型。 gzip 或 compress 的值是两种最常见的可能性。 |
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