4

HttpServletRequest現在のを知る必要がある jspx がありますgetServerName()。jspx は#{mybean.serverName}、次のように Bean からこれを取得できます。

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

ただし、これがプロキシ (mod_proxy を使用する Apache) の背後で提供getServerName()される場合、フロントエンドのホスト名ではなく、ノードのホスト名が返されることがあります。それ以外の場合は正しく機能します。

しかし、will を持つプレーンな jsp<% request.getServerName(); %>は、常にフロントエンドのホスト名を返します。

FacesInstance の問題は何HttpServletRequestですか? 「本当の」リクエストオブジェクトを取得する方法はありますか?

4

1 に答える 1

4

FacesContextのHttpServletRequestの問題は何ですか?

基礎となる実装リクエスト(たまたまサーブレットAPI)を取得しています。コンテナによって提供されたオブジェクトをJSFのサーブレットに呼び出すために、APIを離れているため、これはJSFとはほとんど関係がありません。

JSPrequestオブジェクトもjavax.servlet.ServletRequest;です。それらは同じオブジェクトである可能性があります。

リクエストがラップされている可能性がありますが(たとえば、によってHttpServletRequestWrapper)、からの戻り値を変更することによって何が得られるかを確認するのは困難getServerName()です。

ホスト名の解決方法に何らかの副作用があるのではないかと思います。サーバーでの実装がどのように機能するかを調べgetServerName()ます。

参考:マネージドBeanがなくても値を参照できるはずです。EL式${pageContext.request.serverName}(テストされていない)は値を返す必要があります(JSPではpageContext暗黙の変数です)。

于 2009-11-25T12:21:07.110 に答える