request.getHeader在jsp页面中返回null值

时间:2012-12-27 09:19:11

标签: java http-headers httprequest httpresponse

我编写了一个过滤器,用于向Response对象添加一些标头值。

doFilter正在设置一些标题值,如下所示

public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain filterChain)
            throws IOException, ServletException 
            {   

        final HttpServletResponse response = (HttpServletResponse) res;
        final HttpServletRequest request = (HttpServletRequest) req;

        response.setHeader("X-FRAME-OPTIONS", "SAMEORIGIN");    

        filterChain.doFilter(req, res);     

    }

过滤器映射为"/*"

我有index.jsp页面作为欢迎页面,这是我的应用程序中唯一的页面。我试图读取上面方法中设置的标题值。

我的index.jsp是

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello world</title>
</head>
<body>

<%
    out.println("<br/><br/>XFRAME"+request.getHeader("X-FRAME-OPTIONS"));
%>
<br/>
</body>
</html>

我在页面中获得Null输出。如果将值设置为“SAMEORIGIN”,我无法得到如何获得空值。

XFRAMEnull 

任何人都可以提供帮助。

1 个答案:

答案 0 :(得分:2)

这很简单,您在HttpServletResponse标头中添加了一个属性,并希望从HttpServletRequest标头中读取该属性。那不行。

您需要了解的是HTTP协议。 HttpServletRequest是从客户端到服务器的请求,而HttpServletResponse是来自服务器的数据和流的响应,并转换回客户端消息(由浏览器呈现)。

请求/响应中的每个标头都包含服务器知道接收内容所需的信息,如何转换接收的数据以及返回的响应。因此,HttpServletRequest.getHeaders()几乎永远不会与HttpServletResponse.getHeaders()相同,因为每个请求/响应都符合HTTP请求/响应协议。

此外,您永远不会期望填充回复并神奇地出现在请求中。

我希望这会有所帮助。