6

Web サイトのウェルカム ファイルをサーブレットにすることはできますか? はいの場合、どのように?私は次のようなことを試みていました:

 <welcome-file-list>
    <welcome-file>FilterForwarded</welcome-file>
</welcome-file-list>

<!-- FilterForwarded is a servlet -->

展開中にエラーは表示されませんが、Web サイトabc.comを開こうとすると、ブラウザからこの Web サイトに接続できないというメッセージが表示されます。なぜですか?

誰かが Web サイトにアクセスしたときに、クライアントのパブリック IPを保存できる必要があります。これを行うために、 IP を取得した後、それをサーブレットに渡す Filter を作成しました (そこからログを更新できます)。IP を保存した後、クライアントは自動的に index.jsp にリダイレクトされます。これを達成する方法はありますか?

編集 :

    <servlet-mapping>
       <servlet-name>FilterForwarded</servlet-name>
       <url-pattern>/FilterForwarded</url-pattern>
   </servlet-mapping>

これは、 web.xml で定義されたマッピングです。ウェルカム ファイルで使用する/FilterForwardedと、展開しようとすると次のメッセージが表示されます: 構成が正しくありません: ウェルカム ファイルは相対パスにする必要があります: /FilterForwarded

ログから:

com.google.apphosting.utils.config.AppEngineConfigException: Welcome files must be relative paths: /FilterForwarded
at com.google.apphosting.utils.config.WebXml.validate(WebXml.java:125)
at com.google.appengine.tools.admin.Application.<init>(Application.java:150)
at com.google.appengine.tools.admin.Application.readApplication(Application.java:225)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:145)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:69)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:65)
4

1 に答える 1

4

フィルターを /* にマップすると、すべてのリクエストをインターセプトして、そこから IP をログに記録できるはずです。

または、ランディング ページのクライアント IP のみをログに記録する必要がありますか?

その場合、サーブレット コンテナのデフォルト サーブレットを変更できますが、これにより、web.xml のマッピングと一致しないすべてのリクエストのデフォルト サーブレットが変更されることに注意してください。

<servlet-mapping>
    <servlet-name>FilterForwarded</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

より複雑ですが、より優れたソリューションになる可能性があるのは、Java Web コンテナーの前に Web サーバーを配置し、書き換えルールを使用してバックエンドのサーブレットにプロキシすることです。この方法は、一致しないすべてのリクエストに対してデフォルトのサーブレットをオーバーライドすることなく、ランディング ページでアクセスされるサーブレットを制御できることを意味します。ただし、これはあなたの問題にとってはやり過ぎかもしれません。

于 2012-09-07T11:22:49.850 に答える