【问题标题】:Custom header not inserted in request in servlet自定义标头未插入到 servlet 的请求中
【发布时间】:2011-04-15 08:23:04
【问题描述】:

有一个第三方应用程序需要通过自定义 http 标头获取信息,因此我编写了一个简单的测试应用程序来创建此标头,然后重定向到列出所有标头的页面。

生成标头的 servlet sn-p 是:

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

另一方面,header.jsp 中的相关代码是:

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

显示以下标题:

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

就好像从未插入自定义标题一样。我该如何解决?

谢谢

【问题讨论】:

    标签: java servlets http-headers


    【解决方案1】:

    通过重定向,您基本上是在指示客户端(网络浏览器)触发一个全新的 HTTP 请求。一个全新的请求也意味着一个全新的回应。将其替换为 forward

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

    或者,如果您真的想在重定向请求中使用它,则创建一个映射到 /header.jspFilter 并相应地修改标头。

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

    另请注意,您在 header.jsp 中显示 request 标头,而不是 response 标头。由于没有可用的直接 API 来显示响应标头,因此您希望使用外部 HTTP 标头嗅探工具来调查它们,例如 FirebugNet 面板)或 Fiddler

    【讨论】:

    • 感谢您的回复;我将代码更改为: response.setContentType("text/html;charset=UTF-8"); response.setHeader("cust-header", "cust-val"); request.getRequestDispatcher("header.jsp").forward(request, response);但是自定义标题仍然没有在标题中列出。
    • 您列出的是 request 标头,而不是 response 标头。我建议使用 Firebug 来检查它们。
    猜你喜欢
    • 2017-07-19
    • 2017-09-28
    • 1970-01-01
    • 2023-03-21
    • 2016-06-24
    • 2018-10-17
    • 2016-11-14
    • 2011-03-04
    相关资源
    最近更新 更多