2013-07-19 1 views
1

Как только я вызываю метод следующего класса, он возвращает список файлов cookie, но когда я пытаюсь получить доступ к тому же методу из другого класса, он возвращает NullPointerException.Я не могу получить список доступных файлов cookie

Я полагаю, что причина servletRequest, но как ее решить? есть ли другой способ его реализации?

public class ClientFind extends ActionSupport implements ServletResponseAware, 
                 ServletRequestAware 
{ 
    ..... 
    Cookie coockies[] = servletRequest.getCookies(); 
    for (int i = 0; i < coockies.length; i++) { 
     if (coockies[i].getName().equalsIgnoreCase("ID")) { 
      return coockies[i].getValue(); 
     } 
    } 
    return ""; 
} 

Я также использовал следующий код, но он retunrs java.lang.NullPointerException на линии 4

1  BasicClientCookie cookie = new BasicClientCookie("Namez", "Tim"); 
2  cookie.setPath("/"); 
3  org.apache.http.client.CookieStore cookieStore = null; 
4  cookieStore.addCookie(cookie); 
5  DefaultHttpClient httpclient = new DefaultHttpClient(); 
+0

'coockies.length' звучит грязно: D –

+0

Btw, вопрос не совсем понятен: если вы читаете файлы cookie из действия ClientFind, это работает; если вы читаете файлы cookie из другого действия, это не работает? Можем ли мы увидеть другое действие? –

ответ

0

Я не уверен, если его что вы хотите, но попробуйте следующий код,

import org.apache.commons.httpclient.Cookie; 
import org.apache.commons.httpclient.HttpState; 
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.methods.GetMethod; 

public class GetCookiePrintAndSetValue { 

    public static void main(String args[]) throws Exception { 

    HttpClient client = new HttpClient(); 
    client.getParams().setParameter("http.useragent", "My Browser"); 

    GetMethod method = new GetMethod("http://localhost:8080/"); 
    try{ 
     client.executeMethod(method); 
     Cookie[] cookies = client.getState().getCookies(); 
     for (int i = 0; i < cookies.length; i++) { 
     Cookie cookie = cookies[i]; 
     System.err.println(
      "Cookie: " + cookie.getName() + 
      ", Value: " + cookie.getValue() + 
      ", IsPersistent?: " + cookie.isPersistent() + 
      ", Expiry Date: " + cookie.getExpiryDate() + 
      ", Comment: " + cookie.getComment()); 

     cookie.setValue("My own value"); 
     } 
     client.executeMethod(method); 
    } catch(Exception e) { 
     System.err.println(e); 
    } finally { 
     method.releaseConnection(); 
    } 
    } 
} 
2

Я знаю очень мало о ServletResponse, но если это NullPointerException, что вас беспокоит, вы должны, например, рассмотреть тот факт, что метод getCookies() возвращает s null Если куки-файлы не отправлены.

См http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getCookies()

Edit: Второе исключение, которое вы добавили после моего первого ответа, легко поймать. Фактически вы присваиваете значение null по номеру cookieStore.

+0

Я уверен, что существуют два куки. –

+1

Я уверен, что вы это сделали, @TimNorman, но так как getCookies() очень хорошо может вернуть null, ваш код должен проверить его. – Boise

Смежные вопросы