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

时间:2013-06-18 11:15:44

标签: java servlets browser-detection

我正在使用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。 我有时写过,因为我没有测试用例。

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

我应该注意编码以避免此问题?

是否有其他方法可以获取IP地址&amp;浏览器名称每次?

2 个答案:

答案 0 :(得分:12)

  

String browserName = requestProvider.get()。getHeader(“User-Agent”);

null表示发送请求的人不包含"User-Agent" header

  

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

在正常情况下,

不太可能返回null,但有报道称它可能会在边缘情况下执行,例如after the response has already been sent。无论如何,“获取运行我的应用程序的机器的IP地址”听起来并不像getRemoteAddr()那样。它用于获取发送请求的最新客户端或代理的地址。

  

是否有其他方法可以获取IP地址&amp;浏览器名称每次?

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

答案 1 :(得分:1)

尝试将user-agent用作小写,因为如果我们直接从标头访问它就可以。

String browserName = requestProvider.get()。getHeader(“user-agent”);

获取IP地址的替代方法是

String ip = requestProvider.get()。getHeader(“True-Client-IP”);如果我们有akamai整合,这是有效的。