HttpServletRequest#getHeader("User-Agent")返回null浏览器名称

RAS*_*RAS 8 java servlets browser-detection

我正在使用Java 6.我对JSP和Servlet的了解很少.

我正在使用以下代码来获取运行我的应用程序的浏览器名称:

String browserName = requestProvider.get().getHeader("User-Agent");
Run Code Online (Sandbox Code Playgroud)

此外,我使用以下代码来获取运行我的应用程序的计算机的IP地址:

String ipAdd = requestProvider.get().getRemoteAddr();
Run Code Online (Sandbox Code Playgroud)

在这两种情况下requestProvider都是类型的引用变量Provider<HttpServletRequest>.而且我确信它永远不会NULL.

现在问题是有时我得到两个值(browserName and ipAdd)NULL.我有时写过,因为我没有测试用例.

所以我的问题是,当这些值可以为NULL时,Java中的情况是什么?

编码时应该注意什么,以避免这个问题?

有没有其他方法可以每次获取IP地址和浏览器名称?

Rya*_*art 14

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

null表示发送请求的人不包括"User-Agent"标题.

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

在正常情况下不太可能返回null,但有报告称它可能在边缘情况下这样做,例如在响应已经发送之后.无论如何,"获取运行我的应用程序的机器的IP地址"听起来并不像是什么getRemoteAddr().它用于获取发送请求的最新客户端或代理的地址.

有没有其他方法可以每次获取IP地址和浏览器名称?

不.您完全依赖HTTP客户端和/或任何干预代理的行为来获取此类信息.