请求中出现 NoSuchElementException
NoSuchElementException in request
第一次调用getHeaders()
后,指针停留在Enumeration en的末尾。第二次调用 getHeaders()
时,检查 while(en.hasMoreElements())
时,没有元素,因此返回空向量。
public Enumeration<String> getHeaders(String Pname) {
Vector<String> s = new Vector<String>();
Enumeration<String> en = getHttpServletRequest().getHeaders(Pname);
while (en.hasMoreElements()) {
String data= (String) en.nextElement();
String erase= remove(data);
s.add(erase);
}
return s.elements();
}
异常:
java.util.NoSuchElementException: Vector Enumeration at
java.util.Vector.nextElement(Vector.java:305)
如果您的 getHeaders() 调用 returns 没有命中,则 nextElement() 将抛出 NoSuchElementException,因为它是一个包含 0 个元素的结果,而您已经到了最后。
这可能意味着没有"referer" header集。
如果请求没有 referer
,您的代码 request.getHeaders("referer").nextElement()
将失败。 referer header 不是必需的,实际上是 not supposed to be used in some circumstances.
您可以改用此代码:
<% Enumeration<String> en = getHttpServletRequest().getHeaders("referer");
if (en.hasMoreElements()) {
%>
<%= en.nextElement(); %>
<% } %>
另一种解决方案是将您的 getHeaders()
方法更改为始终 return 枚举中的至少一个元素:
public Enumeration<String> getHeaders(String name) {
Vector<String> v = new Vector<String>();
Enumeration<String> en = getHttpServletRequest().getHeaders(name);
if (!en.hasMoreElements()) {
v.add("");
} else while (en.hasMoreElements()) {
String value = (String) en.nextElement();
String clean = removeXSS(value);
v.add(clean);
}
return v.elements();
}
在调用 nextElement() 之前,您应该进行检查:
<%if (request.getHeaders("referer").hasMoreElements()) { %>
<%=request.getHeaders("referer").nextElement()%>
<%}%>
第一次调用getHeaders()
后,指针停留在Enumeration en的末尾。第二次调用 getHeaders()
时,检查 while(en.hasMoreElements())
时,没有元素,因此返回空向量。
public Enumeration<String> getHeaders(String Pname) {
Vector<String> s = new Vector<String>();
Enumeration<String> en = getHttpServletRequest().getHeaders(Pname);
while (en.hasMoreElements()) {
String data= (String) en.nextElement();
String erase= remove(data);
s.add(erase);
}
return s.elements();
}
异常:
java.util.NoSuchElementException: Vector Enumeration at
java.util.Vector.nextElement(Vector.java:305)
如果您的 getHeaders() 调用 returns 没有命中,则 nextElement() 将抛出 NoSuchElementException,因为它是一个包含 0 个元素的结果,而您已经到了最后。
这可能意味着没有"referer" header集。
如果请求没有 referer
,您的代码 request.getHeaders("referer").nextElement()
将失败。 referer header 不是必需的,实际上是 not supposed to be used in some circumstances.
您可以改用此代码:
<% Enumeration<String> en = getHttpServletRequest().getHeaders("referer");
if (en.hasMoreElements()) {
%>
<%= en.nextElement(); %>
<% } %>
另一种解决方案是将您的 getHeaders()
方法更改为始终 return 枚举中的至少一个元素:
public Enumeration<String> getHeaders(String name) {
Vector<String> v = new Vector<String>();
Enumeration<String> en = getHttpServletRequest().getHeaders(name);
if (!en.hasMoreElements()) {
v.add("");
} else while (en.hasMoreElements()) {
String value = (String) en.nextElement();
String clean = removeXSS(value);
v.add(clean);
}
return v.elements();
}
在调用 nextElement() 之前,您应该进行检查:
<%if (request.getHeaders("referer").hasMoreElements()) { %>
<%=request.getHeaders("referer").nextElement()%>
<%}%>