我使用的是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地址和浏览器名称?
String browserName = requestProvider.get().getHeader("用户代理");
null
表示发送请求的人不包含 “User-Agent”标头。
String ipAdd = requestProvider.get().getRemoteAddr();
在正常情况下不太可能返回 null,但有报告称在极端情况下可能会返回 null,例如 在响应已发送之后。无论如何,“获取运行我的应用程序的计算机的 IP 地址”听起来不像
getRemoteAddr()
的用途。用于获取最近发送请求的客户端或代理的地址。
有没有其他方法可以每次都获取IP地址和浏览器名称?
不。您完全依赖于 HTTP 客户端和/或任何干预代理的行为来获取此类信息。
尝试使用小写的 user-agent,因为如果我们直接从 header 访问它就可以工作。
String browserName = requestProvider.get().getHeader("用户代理");
获取 IP 地址的另一种方法是
String ip = requestProvider.get().getHeader("真实客户端IP");如果我们有 akamai 整合,这就有效。