2012-12-13 2 views
3

리디렉션 페이지의 컨트롤러로 서블릿을 사용하고 있습니다.Java에서 String 매개 변수를 비교할 때 NullPointerException이 발생했습니다.

<li><a href="actionController?key=contact">Contact</a></li> 
<li><a href="actionController?key=support">Request support</a></li> 

내가 원하는 예를 들어, 내 컨트롤러에서이 매개 변수를 수신하고 페이지 Contact.jsp에 대한 페이지에서 요청을 리디렉션 : 그래서, 나는 다음과 같은 링크를 가지고있다.

따라서, 나는 그 것이다 가정, 그러나

contact = request.getParameter("contact"); 

    support = request.getParameter("support"); 

    if (contact.equals("contato")) 
    { 
     RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/center/Contact.jsp"); 
     view.forward(request, response);   
    } 
    else if (support.equals("support")) 
    { 
     RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/center/Support.jsp"); 
     view.forward(request, response); 
    } 

작동하지 않습니다, java.lang.NullPointerException이 함께합니다.

감사합니다.

답변

0

이것은 "연락처"또는 "지원"매개 변수가 없음을 의미합니다. 사용하기 전에 null인지 확인하십시오.

5

서블릿 코드가 HTML 스 니펫과 일치하지 않는 것 같습니다.

String key = request.getParameter("key"); 

    if (key != null && key.equals("contact")) 
    { 
     RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/center/Contact.jsp"); 
     view.forward(request, response);   
    } 
    else if (key != null && key.equals("support")) 
    { 
     RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/center/Support.jsp"); 
     view.forward(request, response); 
    } 
+3

'if ("contact".equals (key))'와 같이 반대 방향으로도 확인할 수 있습니다. 문자열 리터럴 인 "contact"는 이미 'null'이 아니기 때문에 이미 보장되어 있습니다 :) – BalusC

+1

@BalusC : 당연히 - 이것은 실제로 내 자신의 코드에서이 작업을 수행하는 방법입니다 - 그러나 OP는 혼란스러워 보였습니다. null-pointer-exceptions 일반적으로, 나는이 방법이 무엇이 잘못 될지 명확하게 할 것이라고 생각했다. :-) – ruakh

+0

위대한! 그것은 효과가있다! 감사합니다! – user1899652

0

다음 코드를 사용해보십시오 : 나는 당신이 쓸 필요가 있다고 생각

String key = request.getParameter("key"); 

    if(null == key){ 
    // do something 

    } else if(key.equals("contact")){ 
    // do something else 

    } else if(key.equals("support")){ 
    // do something else 

    } else { 
    // etc 

    } 
+0

고마워요! 그것은 효과가있다! – user1899652

0

어떤 "접촉"또는 "지원"매개 변수를 포함하지 않지만 대신에 "키"매개 변수를 포함 요청 .

RFC 3986 - 쿼리 매개 변수를 포함한 URI 구문에 대해 설명합니다.

1

먼저 단순히 방지하기 위해 비교하여 첫 번째 인수로 문자열 리터럴을 넣어 (이 문제의 근본 원인이다 )를 keykey 값을 사용하여 매개 변수 이름을 얻을 수있는 NullPointerExceotion 등 :

String key = request.getParameter("key"); 
if ("contact".equals(key)){ 
    RequestDispatcher view = 
         request.getRequestDispatcher("/WEB-INF/center/Contact.jsp"); 
    view.forward(request, response);   
}else if ("support".equals(key)){ 
    RequestDispatcher view = 
         request.getRequestDispatcher("/WEB-INF/center/Support.jsp"); 
    view.forward(request, response); 
} 

필요한 경우 keycontact도 아니고 support도 아닌 시나리오를 처리하는 것과 같이 기본 처리를 추가하십시오.

관련 문제