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

问题描述 投票:0回答:2

我使用的是Java 6。我对JSP和Servlet的了解很少。

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

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

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

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

在这两种情况下,

requestProvider
都是
Provider<HttpServletRequest>
类型的引用变量。我确信它永远不会
NULL

现在的问题是有时我得到两个值(

browserName and ipAdd
)NULL。 我有时会写,因为我没有测试用例。

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

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

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

java servlets browser-detection
2个回答
18
投票

String browserName = requestProvider.get().getHeader("用户代理");

null
表示发送请求的人不包含 “User-Agent”标头

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

在正常情况下不太可能返回 null,但有报告称在极端情况下可能会返回 null,例如 在响应已发送之后。无论如何,“获取运行我的应用程序的计算机的 IP 地址”听起来不像

getRemoteAddr()
的用途。用于获取最近发送请求的客户端或代理的地址。

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

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


1
投票

尝试使用小写的 user-agent,因为如果我们直接从 header 访问它就可以工作。

String browserName = requestProvider.get().getHeader("用户代理");

获取 IP 地址的另一种方法是

String ip = requestProvider.get().getHeader("真实客户端IP");如果我们有 akamai 整合,这就有效。

© www.soinside.com 2019 - 2024. All rights reserved.