如何获取请求头,远程地址和其他特定于HttpServletRequest的信息?

时间:2011-12-20 17:18:52

标签: servlets jsf-2

我有一个JSF 2.0网络项目,我的网站有一个表格,它必须这样做:

  1. 获取表单的参数并将其保存在Bean中(完成)

  2. 从servlet获取此信息:

    • 远程地址:
    • 远程主持人:
    • 区域设置:
    • 内容类型:
    • 边界:
    • 内容长度:
    • 字符编码:

  3. 将Bean数据和Servlet数据插入数据库表中(等待步骤2)

  4. 我不太了解JSF中的Servlet,如果我必须制作一个,我不需要。我只有JSP的代码:

        String informe="";
        Enumeration a = request.getHeaderNames();
        while(a.hasMoreElements() ){
            String h = a.nextElement().toString();
            informe += h+": "+request.getHeader(h)+"\n";
        }
        a = request.getAttributeNames();
        while(a.hasMoreElements() ){
            String h = a.nextElement().toString();
            informe += h+": "+request.getHeader(h)+"\n";
        }
        informe += "Remote Address: "+request.getRemoteAddr()+"\n";
        informe += "Remote Host: "+request.getRemoteHost()+"\n";
        informe += "Locale: "+request.getLocale()+"\n";
        informe += "Content Type: "+request.getContentType()+"\n";
        informe += "Content Length: "+request.getContentLength()+"\n";
                .....
                ..
    

    我不知道如何在JSF中获取请求信息以及我必须采取的步骤。我读过很多页面,但我认为我并不需要他们做的所有事情。

1 个答案:

答案 0 :(得分:4)

HttpServletRequest对象位于ExternalContext#getRequest()的JSF中。

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
// ...

顺便说一下,ExternalContext还提供了一些获取所需信息的直接方法。在javadoc中查看以getRequestXxx()开头的方法,例如getRequestHeaderMap()getRequestContentType()等。

您不需要另外的servlet。 JSF已经将FacesServlet作为唯一的请求/响应控制器。