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

标签 java servlets browser-detection

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

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

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

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

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

在这两种情况下 requestProviderProvider<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/

相关文章:

java - 如何在调用 servlet/加载页面后立即执行方法/事件

php - 移动浏览器检测?

php - 使用 PHP 检测 iOS 版本

基于当前浏览器的宽度和高度的 JavaScript CSS 选择

java - 获取通用类

java - 在映射中添加 arraylist 值

java - 如何使用 JSP 删除表中的行。错误 : NumberFormatException: null. -> Integer.parseInt(来源未知)

java - HttpServletRequest 的 Hook /回调完成

java 服务包装器,非常基本的逐步设置,启动失败

java - 在 Spring Security Oauth2 中使用 RemoteTokenServices 配置资源服务器