request.getHeader(“User-Agent”)抛出npe

时间:2012-06-01 10:13:33

标签: java java-ee

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

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

先谢谢

4 个答案:

答案 0 :(得分:11)

没有

request.getHeader("User-Agent")

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

(我假设请求是HTTPServletRequest或类似的实例)

答案 1 :(得分:5)

如果客户端未发送request.getHeader("User-Agent")标头,则

null可能会返回User-Agent(并且不是必需的)。将您的代码更改为:

String userAgent = request.getHeader("User-Agent");
if (userAgent != null && userAgent.toLowerCase().indexOf("msie") != -1)

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

您应该处理空案例。