我使用的是 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("User-Agent");
null
表示发送请求的人不包含 "User-Agent" header .
String ipAdd = requestProvider.get().getRemoteAddr();
在正常情况下不太可能返回 null,但有报道称它可能在极端情况下返回 null,例如 after the response has already been sent .无论如何,“获取运行我的应用程序的机器的 IP 地址”听起来不像 getRemoteAddr()
的用途。它用于获取发送请求的最新客户端或代理的地址。
Is there any alternate way to get IP address & browser name every time?
没有。您完全依赖 HTTP 客户端和/或任何干预代理的行为来获取此类信息。
关于java - HttpServletRequest#getHeader ("User-Agent") 返回空浏览器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17167491/