Java 请求中的NoTouchElementException

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

在第一次调用getHeaders之后,指针停留在枚举的末尾。第二次调用getHeaders时,检查whileen.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();    
}

如果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()%>
<%}%>