2009-11-25 172 views
4

我已经得到了需要知道JSPX当前HttpServletRequestgetServerName()。该JSPX可以#{mybean.serverName}从豆提货,这样的:如何在代理服务器后面可靠地访问jspx中的HttpServletRequest?

public String getServerName() { 
    HttpServletRequest request = (HttpServletRequest) FacesInstance.getCurrentInstance().getExternalContent().getRequest(); 
    return request.getServerName(); 
} 

然而,当这个供应代理服务器后面(跟Apache的mod_proxy),getServerName()有时返回节点的主机名代替前端的主机名。其他时候它正常工作。

<% request.getServerName(); %>一个普通的JSP会,但是,总是返回前端的主机名。

什么是与FacesInstance的HttpServletRequest问题?有没有办法获取“真正的”请求对象?

回答

4

做什么用的FacesContext的HttpServletRequest的问题?

你得到underlying implementation request(恰好是servlet API)。这与JSF没什么关系,因为您将离开API来将容器提供的对象调用到JSF的servlet。

的JSP request对象也是一个javax.servlet.ServletRequest;他们很可能是同一个对象。

有一种可能性,即请求被包装(由HttpServletRequestWrapper例如),但它是很难看到什么将通过从getServerName()改变的返回值获得。

我怀疑有一些副作用的主机名解析的方式。我会研究getServerName()在您的服务器中的工作原理。

FYI:你应该能够参考值,而托管bean。 EL表达式${pageContext.request.serverName}(未经测试)应返回值(pageContext是JSP中的implicit variable)。

+0

+1和是'$ {pageContext.request.serverName}'是合法的。 – BalusC 2009-11-25 12:33:01

+0

$ {pageContext.request.serverName}在我的.jspx中为空。我也尝试了#{pageContext.request.serverName},也没有成功。 – neu242 2009-11-25 12:48:22

+0

@ neu242:这是由代理引起的,可能还包括DNS。 – BalusC 2009-11-25 13:25:43

相关问题