我想确认 request.getHeader("User-Agent") 是否可以抛出空指针异常,如果是,那么在什么情况下它会抛出 NPE。
<% if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") != -1) { %>
提前致谢
我想确认 request.getHeader("User-Agent") 是否可以抛出空指针异常,如果是,那么在什么情况下它会抛出 NPE。
<% if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") != -1) { %>
提前致谢
不,
request.getHeader("User-Agent")
永远不应该抛出 a NPE
,但它可能会返回null
,在这种情况下,您的代码将通过 a NPE
。
(我假设 request 是一个HTTPServletRequest
或类似的实例)
request.getHeader("User-Agent")
null
如果客户端未发送标头,则可能会返回User-Agent
(这不是强制性的)。将您的代码更改为:
String userAgent = request.getHeader("User-Agent");
if (userAgent != null && userAgent.toLowerCase().indexOf("msie") != -1)
当然,有可能不发送任何类型的“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 数据包中更改/删除。
大多数浏览器或客户端User-Agent header
在这种情况下发送,request.getHeader("User-Agent")
不应为空。
但是,某些客户端/浏览器可能不会发送User-Agent header
,在这种情况下您的代码可能会引发 NPE。
您应该处理 null 情况。