Java getHeader(“用户代理”)抛出npe

Java getHeader(“用户代理”)抛出npe,java,jakarta-ee,Java,Jakarta Ee,我想确认request.getHeader(“用户代理”)是否可以抛出空指针异常,如果是,那么在什么情况下抛出NPE <% if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") != -1) { %> 提前感谢当然,有可能不发送任何类型的“用户代理”标题。在这种情况下,您的代码抛出NPE-request.getHeader(“用户代理”)==null=>null没有toLowerCase()方法 将

我想确认request.getHeader(“用户代理”)是否可以抛出空指针异常,如果是,那么在什么情况下抛出NPE

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


提前感谢

当然,有可能不发送任何类型的“用户代理”标题。在这种情况下,您的代码抛出NPE-
request.getHeader(“用户代理”)
==null=>null没有
toLowerCase()
方法

将您的if更改为以下内容:


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

请求。如果
user agent
头不是由客户端发送的(并且不是强制性的),则getHeader(“user agent”)
可能返回
null
。将代码更改为:

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

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


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

大多数浏览器或客户端发送
用户代理头
,在这种情况下,
请求.getHeader(“用户代理”)
不应为空

但是,某些客户机/浏览器可能不会发送
用户代理头
,在这种情况下,您的代码可能会抛出NPE


您应该处理空案例。

感谢您的快速响应。您能建议我们将标题用户代理属性设置为null的场景吗?浏览器决定如何向服务器介绍自己,gazylion浏览器插件允许将用户代理更改为您想要的任何文本。另一个例子是,您的internet网关肯定可以更改/删除通过其发送的任何http数据包中的用户代理。在JSP中,您不应该执行空检查,而应该编写:
if!空的request.getHeader(“用户代理”)
这是我的错误,因为request.getHeader(“用户代理”)为空,所以我得到的ponter异常为空。i、 e.请求标头中缺少具有用户代理的属性。是。因此,您的问题的答案是“否”-我假设您想要的问题的答案是“是”(它可以返回null)。如果请求为null呢?:)
request.getHeader("User-Agent")