我需要在http response
中设置自定义标头,并在需要时阅读它们。我使用以下代码来读取标题。
servlet1:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.addHeader("cust-header", "cust-value");
RequestDispatcher rd = request.getRequestDispatcher("servlet2");
rd.include(request, response);
}
servlet2:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getHeader("cust-header"));
}
当我尝试读取自定义标头值时,我在控制台中得到“null”。为什么会这样?如何在必要时阅读设置的自定义标头?
答案 0 :(得分:2)
来自RequestDipatcher include method API doc:
[...] ServletResponse对象的路径元素和参数保留 与来电者保持不变。包含的servlet无法更改 响应状态代码或设置标题;任何改变的尝试都是 忽略。 [...]
因此,如果您查看代码,则在响应对象上设置标头,但尝试从请求中获取它。 由于它们保持不变,因此不起作用。
在转发或包含重定向中将值从servlet传递到另一个的最常用方法是将其作为请求属性传递:
servlet1:
//set a request attribute
request.setAttribute("cust-header", "cust-value");
RequestDispatcher rd = request.getRequestDispatcher("servlet2");
rd.include(request, response);
servlet2:
System.out.println(request.getAttribute("cust-header"));