Java 请求中的NoTouchElementException
在第一次调用getHeaders之后,指针停留在枚举的末尾。第二次调用getHeaders时,检查whileen.hasMoreElements时,没有元素,因此返回空向量Java 请求中的NoTouchElementException,java,vector,httprequest,enumeration,Java,Vector,Httprequest,Enumeration,在第一次调用getHeaders之后,指针停留在枚举的末尾。第二次调用getHeaders时,检查whileen.hasMoreElements时,没有元素,因此返回空向量 public Enumeration<String> getHeaders(String Pname) { Vector<String> s = new Vector<String>(); Enumeration<String> en = ge
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();
}
如果getHeaders调用没有返回命中,那么nextElement将抛出NoSuchElementException,因为它是一个包含0个元素的结果,而您已经在末尾了 这可能意味着没有设置referer标头。您的代码请求。如果请求没有referer,getHeadersreferer.nextElement将失败。referer头不是必需的,事实上是特别需要的 您可以使用以下代码:
<% Enumeration<String> en = getHttpServletRequest().getHeaders("referer");
if (en.hasMoreElements()) {
%>
<%= en.nextElement(); %>
<% } %>
在调用nextElement之前,应检查:
<%if (request.getHeaders("referer").hasMoreElements()) { %>
<%=request.getHeaders("referer").nextElement()%>
<%}%>
第二次调用getHeaders是什么意思?你能解释一下吗?这段代码实际上是在filter类中实现的,每当请求以头处理时,我都应该得到referer url。在第一次调用中,我得到了预期的referer。但是,当我试图用上面的JSP代码在JSP中显示值时,我得到了一个异常,因为在第一次调用本身的while循环中已经创建了en。您可以将getHeaders方法更改为始终至少返回一个值-请参阅我编辑过的答案中的代码示例。但是,在不实现getHeaders的情况下,在JSP中,我使用get null值而不是抛出NOSCHELEMENTEXCEPTION。有关详细信息,请参阅我的编辑。我了解getheaders的功能,但是,我如何查找第二个元素,或者如何从JSP进行第二次调用而不抛出NoTouchElement Exception。我可能只使用for each循环,而不是直接调用迭代器。这样你就可以处理空列表了。我已经检查过了,请在循环时查看我的代码。当我从JSP页面第二次调用时,就会出现这个问题
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();
}
<%if (request.getHeaders("referer").hasMoreElements()) { %>
<%=request.getHeaders("referer").nextElement()%>
<%}%>