第一次调用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$1.nextElement(Vector.java:305)
答案 0 :(得分:0)
如果你的getHeaders()调用没有返回命中,则nextElement()将抛出NoSuchElementException,因为它是一个包含0个元素的结果,并且你已经在最后了。
这可能意味着没有&#34; referer&#34;标题集。
答案 1 :(得分:0)
如果请求没有request.getHeaders("referer").nextElement()
,您的代码referer
将失败。引用标头不是必需的,实际上是not supposed to be used in some circumstances。
您可以改用此代码:
<% Enumeration<String> en = getHttpServletRequest().getHeaders("referer");
if (en.hasMoreElements()) {
%>
<%= en.nextElement(); %>
<% } %>
另一种解决方案是将getHeaders()
方法更改为始终在枚举中返回至少一个元素:
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();
}
答案 2 :(得分:0)
在调用nextElement()之前,您应该检查一下:
<%if (request.getHeaders("referer").hasMoreElements()) { %>
<%=request.getHeaders("referer").nextElement()%>
<%}%>