Custom header not inserted in request in servlet

12,766

With a redirect you're basically instructing the client (the webbrowser) to fire a brand new HTTP request. A brand new request also means a brand new response. Replace it by a forward:

request.getRequestDispatcher("header.jsp").forward(request, response);

Or if you actually want to have it on the redirected request, then create a Filter which is mapped on /header.jsp and modifies the header accordingly.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    ((HttpServletResponse) response).setHeader("foo", "bar");
    chain.doFilter(request, response);
}

Also note that you're displaying the request headers in the header.jsp instead of response headers. Since there's no direct API avaliable to display the response headers, you'd like to investigate them using an external HTTP header sniffing tool like Firebug (the Net panel) or Fiddler.

Share:
12,766
xain
Author by

xain

SW PM,architect and programmer

Updated on June 17, 2022

Comments

  • xain
    xain almost 2 years

    There's a thrird party app that needs to get information via custom http headers, so I wrote a simple test app that creates this headers and then redirects to a page that lists all headers.

    The header-generating servlet snippet is:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain");
        response.setHeader("cust-header", "cust-val");
        response.sendRedirect("header.jsp");
    }
    

    On the other hand, the relevant code from header.jsp is:

    <%
        Enumeration enumeration = request.getHeaderNames();
        while (enumeration.hasMoreElements()) {
        String string = (String)enumeration.nextElement();
        out.println("<font size = 6>" +string +": " + request.getHeader(string)+ "</font><br>");
        }
        %>
    

    That displays the following headers:

    Host: localhost:9082
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 (.NET CLR 3.5.30729)
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Referer: http://localhost:9082/HdrTest/login.jsp
    Cookie: JSESSIONID=0000tubMmZOXDyuM4X9RmaYYTg4:-1
    

    As if the custom header was never inserted. How can I fix it ?

    Thanks

  • xain
    xain over 13 years
    Thanks for your reply; I changed the code to: response.setContentType("text/html;charset=UTF-8"); response.setHeader("cust-header", "cust-val"); request.getRequestDispatcher("header.jsp").forward(request, response); But still the custom header is not listed in the headers.
  • BalusC
    BalusC over 13 years
    You're listing the request headers instead of response headers. I'd suggest to use Firebug to check them.