2

パブリック ドメインで実行しているサーブレットの 1 つで、request.getRequestURL() メソッドから異常な文字列ログを取得しました。詳細を記録し続けると、「http://answers.yahoo.com」というエントリが見つかりました。これがどのように起こったのか、またそれを達成する方法を分析するのを手伝ってくれる人がいますか. 理想的には、ログは、ユーザーまたはデバイスがサーブレットを呼び出す際に使用するブラウザの URL アドレスである必要があります。

たとえば、IP にマップされたサーバーの登録名がhttp://www.alphabeta.com/x_serv?a=2の場合、ログは alphabeta.com になります。

4

1 に答える 1

0

正確に何を記録したいですか?

ホスト名のみが必要な場合はgetServerName()、インターフェイスからのメソッドを使用します。javax.servlet.ServletRequestリクエストが送信されたサーバーのホスト名を返します。

getServerName()サーブレットによって引き起こされたパラメーターなしで URL を取得する場合は、メソッドと組み合わせて使用​​しgetServletPath()ます。getServletPath()インターフェイスからのメソッドjavax.servlet.http.HttpServletRequestは、サーブレットを呼び出すこのリクエストの URL の一部を返しますが、追加のパス情報やクエリ文字列は含まれません。

次のコード フラグメントは、ページの絶対 URL を決定します。

String uri = request.getRequestURI();
if (request.getQueryString() != null) {
   uri += '?' + request.getQueryString();
}
URL reconstructedUrl = new URL(request.getScheme(),
                           request.getServerName(),
                           request.getServerPort(),
                           uri);
logger.info("The full URL: " + reconstructedUrl.toString());

URLclass は package の場所java.netです。

于 2012-05-08T10:35:21.797 に答える