2010-04-30 5 views
2

세션 객체에서 Arraylist을 가져 와서 항목을 제거하는 JSP가 있습니다. 그 페이지로 이동하면 페이지가 공백 상태가되어 제대로 작동하지 않는 것 같습니다. 나는 톰캣 로그 파일을 확인하고 catalina.out에 나는 JasperException를 수신하고있는 IT는 다음JasperException의 가능한 원인은 무엇입니까

for(int i; i < agentItems.size(); i++) 

agentItems와 라인에있는로 표시되어 내가 사용하고있는 ArrayList의 이름입니다. 디버깅을 해본 결과 문제의 원인을 파악할 수 없습니다. 나는 JasperException이 JSP의 NullPointerException으로 던져진 sometiems라는 것을 읽었습니다. 이게 사실인가요, 아니면 그냥 완전히 그 문제를 간과하고 있습니까?

로컬 웹 서버에서 실행중인 웹 응용 프로그램과 중간 서버에서 두 가지 문제가 발생하지 않았습니다. 이 서버에서만 문제가되는 이유는 무엇일까요?

답변

3

모두 일 수 있습니다. stacktrace에서 조금 더 살펴보고 caused by 또는 root cause 부분과 그 이후 나오는 추적을 살펴 봐야합니다. 그것은 많은 일들로 인해 발생할 수 있습니다. JSP는 기본적으로 하나의 큰 try 블록으로 컴파일되고 catch 된 Throwable은 Tomcat 및 복제본에서 JasperException과 같은 servletcontainer 특정 예외로 래핑됩니다. 그것은이 아래로 비등 :

try { 
    // All translated JSP code comes here. Max 64K. 
} catch (Throwable t) { 
    throw new JasperException(t); 
} 

확인이 스택 트레이스의 1 라인의 .java 파일 이름의 servletcontainer의 work 디렉토리에이를 찾아 편집기에서 파일을 엽니 다. 너는 그것을 보느냐?

즉, 스크립틀릿을 사용하면 bad practice입니다. 서블릿을 사용하여 요청을 제어/전처리/후 처리하고 Javabeans를 사용하여 데이터 모델을 표현하며 JSP의 Taglib을 사용하여 페이지 플로우 및 출력을 제어하고 JSP의 EL (Expression Language)을 사용하여 백엔드 데이터에 액세스합니다. 특정 경우에 배열 또는 List을 JSTL의 c:forEach 태그를 사용하여 루프 할 수 있습니다. JSP는 외부에서 얻는 것 요소 또는 항목에 액세스 할 수없는 경우

<c:forEach items="${agents}" var="agent"> 
    <p>Agent: ${agent.name} 
</c:forEach> 
0

jasperexception가 발생할 수 있으며, 여기 아마 agentItems에 액세스 할 수 없습니다. 그렇지 않으면 정규화 된 클래스 이름을 제공하거나 패키지를 가져 오십시오.

관련 문제