TMD45'β'LOG!!!

Life is Beta-ful.

Tomcat で動く Java Servlet アプリ内から「自身以外のサーバ名」を取得したい

apache-tomcat-5.5.15, Java EE 5, Eclipse, WindowsXP

いいタイトルが思いつかなかった・・・(´・ω・`)

localhost:8080 で動作させている AP サーバ(Tomcat)上の Java アプリにおいて HttpServletRequest.getServerName() で取得できるホスト名(サーバ名)を localhost 以外にしたかったのです。

それで前の記事に書いたバーチャルホストの設定をやったのだけど、いくらバーチャルホストを増設しても、HttpServletRequest.getServerName() で取得できるサーバ名は localhost のまま・・・


結果的に、以下の記事の説明がどんぴしゃだった。


本来は経由されたサーバ(Web サーバや Proxy サーバなど)のサーバ名を指定することで、動的に完全な URL を生成できるようにするためとかに必要になる設定。
ですが、実体として「経由するサーバ」が存在しなくても、Tomcat の設定を変えてやるだけで HttpServletRequest.getServerName() で取得できるサーバ名を localhost 以外にすることができました。

設定ファイルに proxyName を指定する

Tomcat の server.xml の Connector 要素に proxyName と proxyPort を追加:

<Service name="Catalina">

  <Connector port="8080" maxHttpHeaderSize="8192"
             maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
             enableLookups="false" redirectPort="8443" acceptCount="100"
             connectionTimeout="20000" disableUploadTimeout="true"
             useBodyEncodingForURI="true"
             proxyName="hogeserver.local" proxyPort="8080"    ←★ここを追加
   />

  <Connector port="8009" 
             enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

  <Engine name="Catalina" defaultHost="localhost">

    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>

    <Host name="localhost" appBase="webapps2"
          unpackWARs="true" autoDeploy="true"
          xmlValidation="false" xmlNamespaceAware="false">

      <Context path="/WebApps" cookies="true" reloadable="true"
               docBase="C:\project\eclipse\workspace\webapps\WebContent"
               workDir="C:\project\eclipse\workspace\webapps\work" />

    </Host>

  </Engine>

</Service>

このようにすると、localhost:8080 でアクセスしたアプリケーション内で HttpServletRequest.getServerName() によって hogeserver.local というサーバ名を取得できるようになったのでした。




本来の使い方とは外れていますが、外れているからこその自分メモだよね~ってことで(誰に言い訳してるの?)。

('ω`)

▲ ページトップへ移動