请求中的NoSuchElementException

时间:2015-01-28 10:13:39

标签: java vector httprequest enumeration

第一次调用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)

3 个答案:

答案 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()%>
<%}%>