未在servlet中的请求中插入自定义标头

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

生成标头的servlet片段是:

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("" +string +": " + request.getHeader(string)+ "
"); } %>

这显示以下标题:

 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 

好像从未插入自定义标头。 我该如何解决?

谢谢

通过重定向,您基本上是在指示客户端(webbrowser)发出全新的HTTP请求。 全新的要求也意味着全新的回应。 替换为前锋

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

或者,如果您确实想要在重定向的请求上使用它,那么创建一个映射在/header.jsp上的/header.jsp并相应地修改标头。

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

另请注意,您在header.jsp显示请求标头而不是响应标头。 由于没有直接API可用于显示响应标头,因此您需要使用外部HTTP标头嗅探工具(如Firebug ( Net面板)或Fiddler )对其进行调查。