To set response headers using HttpServletResponse
in a Java web application (e.g., within a servlet), you can use the setHeader
or addHeader
methods provided by the HttpServletResponse
class. Here’s an overview of both methods and how to use them:
Methods for Setting Headers
setHeader(String name, String value)
- This method sets a response header with a given name and value.
- If the header already exists, it replaces the existing value with the new one.
addHeader(String name, String value)
- This method allows you to add multiple values for the same header name.
- If the header already exists, it adds the new value rather than replacing it.
Example Code
Below is an example of setting headers in a servlet:
package org.kodejava.servlet;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/setHeaders")
public class HeaderServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set Content-Type Header
response.setContentType("text/html");
// Set a custom response header
response.setHeader("Custom-Header", "CustomValue");
// Add multiple custom values for the same header name
response.addHeader("Custom-Multi-Value-Header", "Value1");
response.addHeader("Custom-Multi-Value-Header", "Value2");
// Set Cache-Control Header
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
// Set Expires Header
response.setHeader("Expires", "0");
// Write the response body
response.getWriter().println("<h1>Response Headers Set</h1>");
}
}
Important Notes
- Setting Content-Type: Use
setContentType(String type)
to set the MIME type of the response body, like"text/html"
,"application/json"
, etc. - Overwriting Headers: Use
setHeader
if you want to ensure a header has only one value (overwriting any existing ones). - Adding Multiple Values: Use
addHeader
if the header allows multiple values (e.g.,Set-Cookie
).
Commonly Used Response Headers
Here are some commonly used headers for different scenarios:
- Caching:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Expires", "0"); response.setHeader("Pragma", "no-cache");
- Content-Type and Encoding:
response.setContentType("text/html"); response.setCharacterEncoding("UTF-8");
- Custom Headers:
response.setHeader("X-App-Name", "MyWebApplication");
- CORS (Cross-Origin Resource Sharing):
response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); response.setHeader("Access-Control-Allow-Headers", "Content-Type");
With this approach, you can control headers in your servlet responses effectively.
Maven dependencies
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.1.0</version>
<scope>provided</scope>
</dependency>