2

我想确认 request.getHeader("User-Agent") 是否可以抛出空指针异常,如果是,那么在什么情况下它会抛出 NPE。

<% if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") != -1) { %>

提前致谢

4

4 回答 4

13

不,

request.getHeader("User-Agent")

永远不应该抛出 a NPE,但它可能会返回null,在这种情况下,您的代码将通过 a NPE

(我假设 request 是一个HTTPServletRequest或类似的实例)

于 2012-06-01T10:20:58.310 回答
6

request.getHeader("User-Agent")null如果客户端未发送标头,则可能会返回User-Agent(这不是强制性的)。将您的代码更改为:

String userAgent = request.getHeader("User-Agent");
if (userAgent != null && userAgent.toLowerCase().indexOf("msie") != -1)
于 2012-06-01T10:18:07.803 回答
0

当然,有可能不发送任何类型的“User-Agent”标头。在这种情况下,您的代码 throw NPE - request.getHeader("User-Agent")== null => null 没有toLowerCase()方法。

将您的 if 更改为以下内容: <% if (request.getHeader("User-Agent") != null && request.getHeader("User-Agent").toLowerCase().indexOf("msie") != -1) { %>

浏览器决定如何向服务器介绍自己,有大量浏览器插件允许将用户代理更改为您想要的任何文本。另一个例子,您的互联网网关肯定可以user-agent从任何通过它的 http 数据包中更改/删除。

于 2012-06-01T10:15:36.237 回答
0

大多数浏览器或客户端User-Agent header在这种情况下发送,request.getHeader("User-Agent")不应为空。

但是,某些客户端/浏览器可能不会发送User-Agent header,在这种情况下您的代码可能会引发 NPE。

您应该处理 null 情况。

于 2012-06-01T10:50:44.533 回答