Of course! The term "getHeader" in Java is most commonly associated with Servlets, where it's used to read HTTP headers from a client's request. However, similar concepts exist in other Java libraries like HTTP clients.

Let's break it down into the most common use cases.
In Java Servlets (The Classic Case)
In a web application, an HttpServletRequest object represents the client's request. This object has several methods to get HTTP headers.
Key Methods in HttpServletRequest
getHeader(String name): Returns the value of a specified header as aString. If the header is not found, it returnsnull.getHeaders(String name): Returns anEnumeration<String>of all values for a specified header. Some headers, likeAccept-Language, can have multiple values.getHeaderNames(): Returns anEnumeration<String>of all header names available in the request.getIntHeader(String name),getDateHeader(String name): Convenience methods to get a header value as anintor ajava.util.Date. They throw anIllegalArgumentExceptionif the header value cannot be parsed.
Example: A Simple Servlet
Here's a complete example of a servlet that prints all the headers it receives.
HeaderPrinterServlet.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/headers")
public class HeaderPrinterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set the content type
response.setContentType("text/html;charset=UTF-8");
// Get a PrintWriter to write the response
try (PrintWriter out = response.getWriter()) {
// Start building the HTML response
out.println("<html><head><title>Request Headers</title></head><body>");
out.println("<h1>HTTP Request Headers</h1>");
out.println("<table border=\"1\">");
out.println("<tr><th>Header Name</th><th>Header Value(s)</th></tr>");
// Get all header names
Enumeration<String> headerNames = request.getHeaderNames();
// Iterate through each header name
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
// Get the first value for the header
String headerValue = request.getHeader(headerName);
out.println("<tr><td><b>" + headerName + "</b></td>");
out.println("<td>");
// Check if there are multiple values for this header
Enumeration<String> values = request.getHeaders(headerName);
if (values.hasMoreElements()) {
// If there are multiple, print them all
while (values.hasMoreElements()) {
out.println(values.nextElement());
if (values.hasMoreElements()) {
out.println(", "); // Add a comma between values
}
}
} else {
// Otherwise, just print the single value
out.println(headerValue);
}
out.println("</td></tr>");
}
out.println("</table>");
out.println("</body></html>");
}
}
}
How to Test It:
- Deploy this servlet to a server (like Apache Tomcat).
- Open your web browser and navigate to
http://localhost:8080/your-app-name/headers. - You will see a table displaying all the headers sent by your browser, including common ones like
Host,User-Agent,Accept, etc.
In Modern HTTP Clients (e.g., Apache HttpClient, OkHttp)
When you act as a client and make an HTTP request, you also use methods to get the response headers. The method is often still called getHeader().
Example: Using Apache HttpClient 5
Here's how you would get response headers after making a GET request.
Maven Dependency:

<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.3.1</version>
</dependency>
Java Code:
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import java.io.IOException;
public class HttpClientHeaderExample {
public static void main(String[] args) {
// Use try-with-resources to ensure the client and response are closed
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet request = new HttpGet("https://www.google.com");
System.out.println("Executing request: " + request.getMethod() + " " + request.getUri());
try (CloseableHttpResponse response = httpClient.execute(request)) {
// Get the status line
System.out.println("Response status: " + response.getCode());
// --- GETTING HEADERS ---
System.out.println("\n--- Response Headers ---");
// Get all headers as an array
Header[] allHeaders = response.getHeaders();
for (Header header : allHeaders) {
System.out.println(header.getName() + ": " + header.getValue());
}
// Get a specific header
System.out.println("\n--- Specific Header ---");
Header contentTypeHeader = response.getHeader("Content-Type");
if (contentTypeHeader != null) {
System.out.println("Content-Type: " + contentTypeHeader.getValue());
} else {
System.out.println("Content-Type header not found.");
}
// Read the response body (optional)
HttpEntity entity = response.getEntity();
if (entity != null) {
String responseBody = EntityUtils.toString(entity);
System.out.println("\n--- Response Body (first 200 chars) ---");
System.out.println(responseBody.substring(0, Math.min(responseBody.length(), 200)));
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
In JavaMail API
When dealing with email, you use getHeader() to get headers from a MimeMessage.
Maven Dependency:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
Java Code:
import javax.mail.*;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class JavaMailHeaderExample {
public static void main(String[] args) throws MessagingException {
// This is a sample MimeMessage. In a real app, you'd get this from a store or folder.
// For this example, we'll create one programmatically.
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("sender@example.com"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com"));
message.setSubject("Test Email");
message.setText("This is a test email body.");
// --- GETTING HEADERS ---
System.out.println("--- Email Headers ---");
// Get all header names
Enumeration<String> headerNames = message.getAllHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println(headerName + ": " + message.getHeader(headerName));
}
// Get a specific header
System.out.println("\n--- Specific Header ---");
String subject = message.getHeader("Subject", null); // The second arg is the charset
System.out.println("Subject: " + subject);
}
}
Summary
| Context | Object | Method | Purpose |
|---|---|---|---|
| Servlets | HttpServletRequest |
getHeader(String name) |
Read client request headers. |
| HTTP Client | HttpResponse (e.g., HttpClient) |
getHeader(String name) |
Read server response headers. |
| JavaMail | MimeMessage |
getHeader(String name) |
Read email message headers. |
In short, getHeader is a fundamental method for reading metadata (headers) from structured messages in Java, whether that message is an HTTP request, an HTTP response, or an email. The most common usage for web developers is within Servlets.
