在第一次调用getHeaders()之后,指针停留在枚举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)发布于 2015-01-28 10:24:26
如果请求没有request.getHeaders("referer").nextElement(),您的代码referer将失败。引用头并不是必需的,实际上是专门的不应该在某些情况下使用。
您可以使用以下代码:
<% 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();
}发布于 2015-01-28 10:19:45
如果您的getHeaders()调用没有返回hits,那么nextElement()将抛出NoSuchElementException,因为它是一个具有0元素的结果,并且已经结束了。
这可能意味着没有"referer“头集。
发布于 2015-01-28 10:28:30
在调用nextElement()之前,应该先检查一下:
<%if (request.getHeaders("referer").hasMoreElements()) { %>
<%=request.getHeaders("referer").nextElement()%>
<%}%>https://stackoverflow.com/questions/28189565
复制相似问题