본문 바로가기

IT 이야기/프로그래밍

JSP 에러 메시지

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. The requested resource (...) is not available.
-> application을 정의해 주는 context 구문이 제대로 되어 있는지 확인한다.
ex)ROOT와 관련한 context 정의
<Context path="/" docBase="" debug="0" reloadable="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

ex)test라는 application과 관련한 context 정의
<Context path="/test" docBase="test" debug="0" reloadable="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

-> apache를 재가동 시킨후 tomcat을 재가동한다.(시간이 조금 걸릴수 있으니 2-5 분 정도 기다릴 필요가 있다).

-> $TOMCAT_HOME/conf/context.html을 수정해준다.(수정하지 않더라도 파일을 다시 저장하면 되는듯.)


2. The type xxx is not visible
-> xxx 객체가 public으로 선언이 되었는지 확인한다.(xxx에서 사용하는 객체들 역시 public으로 선언이 되어 있어야 하는지는 잘 모르겠다.)

3. java.sql.SQLException: ORA-01000: 최대 열기 커서 수를 초과했습니다
-> SQL Connection을 사용한뒤 close 메서드를 수행해주지 않아,  SQL에서 처리를 위해 할당한 프로세스 개수($ORACLE_HOME/pfile/init.ora에서 설정된)를 초과한 경우 발생하는 메시지이다.

-> JSP 페이지에서 에러가 발생했고 이에 적절하게 열려있는 DB Connection을 닫아 주지 않는 경우 위 에러가 발생할 수 있다. 이 경우 이 부분의 로직을 수정하고 더불어 Tomcat을 재시작해서 현재 Context가 어느 정도 clean한 상태라고 가정한뒤 다시 프로그램을 로딩, 테스트 해야 한다. 그럼에도 문제가 발생한다면 DB Connection을 관리하는 부분도 의심해야 한다.(일반적이지 않지만 DB 설정에서 너무 작은 Connection 수 제한의 문제일 수도 있으니 확인해볼 필요는 있다.)


4. Proxy Error , The Proxy server received an invalid response from an upstream server.

-> 이건 참 골치아픈 문제이다.

Ajax처럼 해당 페이지에서 다른 페이지의 결과를 참조하는 경우 다른 페이지의 결과가 적절한 코드가 아닌 경우( 예를 들면 " " 문자열 안에 " 가 존재해서 닫혀지지 않는 경우 ) 위 에러가 나타난다. 따라서 현재 페이지에서 참조하는 다른 페이지의 결과가 제대로 되어 있는지 확인해야 한다.
또한 이런 경우가 아주 흔한데, mysql과 같이 DB 연동한 경우 login process 오류가 발생하는 경우도 이런 문제가 발생한다.
tomcat DB Pool을 사용하는 경우 정확한 login이 이뤄지고 있는지도 확인해볼 필요가 있다.



5. GetOutputStream() has already been called for this response
-> Jsp에서 response.GetOutputStream() 메서드를 호출해서 ServletOutputStream을 사용하려고 하는 것은 적절하지 않았다. 이런 경우 위 에러 메시지를 볼 수 있다. OutputStream을 자바 어플리케이션에 전달해서 바로 결과를 뿌려주는 경우 등등에서 OutputStream이 필요한데, 이런 경우는 getWriter를 사용해야 한다. response.getWriter() 메서드는 java.io.PrintWriter()를 반환한다. 이때 당연히 주의해서 character set 처리를 해야 한다.

-> 다른 방법으로는 JSP 페이지를 사용하지 않고 Servlet으로 변환해서 작업하라는 것. 이 경우 OutputStream은 바로 access할 수가 있으니 이런 문제는 문제 거리가 아니다.(그러나 getWriter()를 이용해 문제 해결되는 경우가 많아서 이럴 필요까지는...)

6. bad gateway 어저꼬 저쩌고 하는 502 에러
502 에러가 발생하는 시나리오는 여러가지가 있겠으나, 나의 경우는 이런 경우였다.
Apache를 사용하고 Tomcat을 사용해 DB 연동한 결과를 뿌려주는 작업(대부분 Tomcat을 이용한 경우 이렇겠지만...)을 하는데,
Apache의 jk 모듈에 타임아웃이 3초로 걸려있었다. 
Apache htttp.conf에 걸려있는 타임아웃이 30초, DB query문에 30초가 걸려 있다고 하더라도 3초의 timeout은 독립적으로 작용한다.
Apache는 Http response를 30초 동안 받지만, 3초  이상이 걸리는 것은 모듈을 사용하는 Program에는 전송할 수 없게 된다.
결국 에러인 502 메시지를 전송하게 된다.



참조 http://oopsoopskeke.tistory.com