我想确认request.getHeader(“User-Agent”)是否可以抛出空指针异常,如果是,那么在它抛出NPE的情况下是什么情况。
<% if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") != -1) { %>
先谢谢
答案 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。
您应该处理空案例。