web-dev-qa-db-ja.com

HttpServletRequest#getHeader( "User-Agent")はnullのブラウザ名を返します

Java 6を使用しています。JSPとサーブレットの知識がほとんどありません。

次のコードを使用して、アプリケーションが実行されているブラウザー名を取得しています。

String browserName = requestProvider.get().getHeader("User-Agent");

また、次のコードを使用して、アプリケーションが実行されているマシンのIPアドレスを取得しています。

String ipAdd = requestProvider.get().getRemoteAddr();

どちらの場合も、requestProviderはタイプProvider<HttpServletRequest>の参照変数です。そして、それは決してNULLではないと確信しています。

ここで問題となるのは、両方の値(browserName and ipAdd)がNULLになる場合があります。テストケースがないので時々書いています。

だから私の質問は、これらの値がNULLになる可能性がある場合、Javaではどのような場合ですか?

この問題を回避するには、コーディングにどのような注意を払う必要がありますか?

毎回IPアドレスとブラウザ名を取得する別の方法はありますか?

8
RAS

String browserName = requestProvider.get()。getHeader( "User-Agent");

nullは、リクエストを送信した人が "User-Agent"ヘッダー を含まなかったことを意味します。

String ipAdd = requestProvider.get()。getRemoteAddr();

通常の状況ではnullを返す可能性は低いですが、 応答がすでに送信された後 のように、Edgeの場合にnullを返す可能性があるという報告があります。とにかく、「アプリケーションが実行されているマシンのIPアドレスを取得する」は、getRemoteAddr()の目的とは異なります。これは、リクエストを送信した最新のクライアントまたはプロキシのアドレスを取得するためのものです。

毎回IPアドレスとブラウザ名を取得する別の方法はありますか?

いいえ。このような情報を取得するには、HTTPクライアントや介在するプロキシの動作に完全に依存しています。

14
Ryan Stewart

ヘッダーから直接アクセスすると機能するため、user-agentを小文字として使用してみてください。

String browserName = requestProvider.get()。getHeader( "user-agent");

iPアドレスを取得する別の方法は

String ip = requestProvider.get()。getHeader( "True-Client-IP");これは、アカマイの整数化がある場合に機能します。

1
Dilip Prakash