JavaServer Pages 문제점 해결 팁
이 팁을 사용하여 JavaServer 페이지의 문제점을 해결할 수 있습니다.
웹 서버에 의해 표시되는 JSP 소스 코드
웹 서버 문서 루트에서 WebSphere® Application Server의 문서 루트를 공유하는 경우 웹 서버가 JSP(JavaServer Pages) 소스 파일을 일반 텍스트로 표시하여 보안이 노출될 수 있습니다.
- 문제점
- WebSphere 웹 서버 플러그인 규칙 세트를 사용하여 주어진 요청이 WebSphere Application Server에 의해 처리되는지 여부를 판별할 수 있습니다. 수신 요청이 이러한 규칙과 일치하지 않으면 웹 서버 플러그인은 웹 서버로 제어를 리턴하여 웹 서버가 요청을 이행할 수 있도록 합니다. 이 경우, 그 규칙은 WebSphere Application Server가 이를 처리해야 한다고 표시하지 않기 때문에 알 수 없는 호스트 헤더로 인하여 웹 서버 플러그인이 웹 서버로 제어를 리턴하게 됩니다. 따라서 웹 서버는 웹 서버 문서 루트에서 그 요청을 검색합니다. JSP 소스 파일은 웹 서버의 문서 루트에 저장되기 때문에 웹 서버는 그 파일을 찾아서 일반 텍스트로 표시합니다.
- 제안된 솔루션
- WebSphere Application Server JSP 소스 파일을 웹 서버 문서 루트의 외부로 이동시키십시오. 그런 다음, 이 요청이 알 수 없는 호스트 헤더와 함께 나올 때 플러그인이 제어를 웹 서버로 리턴하며, JSP 소스 파일은 문서 루트에서 발견되지 않습니다. 따라서 웹 서버는 JSP 소스 파일이 아닌 404 파일을 찾을 수 없음 오류를 리턴합니다.
@include 지시문 사용시 2바이트 문자 세트(DBCS) 문자 표시 문제점
@include 지시문을 사용하는 JavaServer 페이지 파일은 2바이트 문자 세트(DBCS) 문자를 표시할 때 문제점을 경험할 수 있습니다. WebSphere Application Server 버전 6.0 이상으로 마이그레이션되는 일부 애플리케이션은 역방향 호환성 문제의 결과로 JSP 2.0 스펙을 준수하기 위해 수정해야 할 수 있습니다. JSP 2.0 스펙은 각 파일의 문자 인코딩이 별도로 결정되기 때문에 한 파일이 include 지시문을 사용하여 다른 파일을 포함하더라도 정적으로 포함된 각 자원이 페이지 인코딩 또는 컨텐츠 유형을 설정해야 합니다.
JSP(JavaServer Pages) 엔진 사용 문제점
- .html 파일 또는 서블릿과 같은 기타 자원이 올바르게 요청되고 표시되는지 판별하십시오. 그렇지 않은 경우, 문제점은 HTTP Server와 같은 더 깊은 레벨에 있을 수 있습니다.
- 기타 자원이 올바르게 표시되는 경우, JSP 프로세서이 정상적으로 시작되었는지 판별하십시오.
액세스 중인 JSP 파일을 호스트하는 서버의 JVM 로그를 찾아보십시오. 다음 메시지는 JSP 프로세서가 정상적으로 시작되었음을 표시합니다.
JSP 프로세서가 로드되지 못하면, 다음과 같은 메시지가 표시됩니다.Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] was initialized successfully. Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] has been associated with patterns [*.jsp *.jspx *.jsw *.jsv ].
root_dir/logs/server_name/SystemOut.log 파일에서No Extension Processor found for handling JSPs. JSP Processor not defined. Skipping : jspfilename.
액세스 중인 JSP 파일을 호스트하는 서버의 로그를 찾아보십시오. 다음 메시지는 JSP 프로세서가 정상적으로 시작되었음을 표시합니다.
JSP 프로세서가 로드되지 못하면, 다음과 같은 메시지가 표시됩니다.Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] was initialized successfully. Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] has been associated with patterns [*.jsp *.jspx *.jsw *.jsv ].
서버 로그 파일에서No Extension Processor found for handling JSPs. JSP Processor not defined. Skipping : jspfilename.
- JSP 엔진이 정상적으로 시작된 경우, 문제점은 JSP 파일 자체에 있을 수 있습니다.
JSP에 유효하지 않은 JSP 구문이 있어서 JSP 프로세서가 처리할 수 없습니다. 대상 애플리케이션의 root_dir/logs/server_name/SystemOut.log 파일에서 유효하지 않은 JSP 지시문 구문 메시지를 조사하십시오. 브라우저에서 다음과 유사한 오류가 이러한 문제 유형을 표시합니다.
이 예는 이름 지정된 JavaServer Pages 파일의 2 행, 1 열에서 jsp:include 조치에 대한 필수 속성이 누락되었음을 표시합니다. 기타 구문 오류에 대해 유사한 메시지가 표시됩니다.Message: /filename.jsp(2,1)JSPG0076E: Missing required attribute page for jsp element jsp:include
JSP에 유효하지 않은 JSP 구문이 있어서 JSP 프로세서가 처리할 수 없습니다. 대상 애플리케이션의 서버 로그 파일에서 유효하지 않은 JSP 지시문 구문 메시지를 조사하십시오. 브라우저에서 다음과 유사한 오류가 이러한 문제 유형을 표시합니다.
이 예는 이름 지정된 JavaServer Pages 파일의 2 행, 1 열에서 jsp:include 조치에 대한 필수 속성이 누락되었음을 표시합니다. 기타 구문 오류에 대해 유사한 메시지가 표시됩니다.Message: /filename.jsp(2,1)JSPG0076E: Missing required attribute page for jsp element jsp:include
- 대상 애플리케이션 서버의 SystemErr.log 파일에서 유효하지 않은
Java™ 구문 문제점을 검사하십시오. 브라우저에 Message: Unable to compile
class for JSP와 유사한 오류가 나타나면 이러한 종류의 문제점이 있는 것입니다. Javac 컴파일러의 오류 메시지 출력은 SystemErr.log 파일에 있습니다. 이 출력은 다음과 같습니다.
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:\WASROOT\temp\ ... test.war\_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
JSP 파일의 오류를 정정하고 파일을 재시도하십시오.
- 대상 애플리케이션의 로그 파일에서 올바르지 않은
Java 구문 문제점을
검사하십시오. 브라우저에 Message: Unable to compile
class for JSP와 유사한 오류가 나타나면 이러한 종류의 문제점이 있는 것입니다.
Javac 컴파일러의 오류 메시지 출력은 SystemErr.log에 있습니다. 이 출력은 다음과 같습니다.
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:\WASROOT\temp\ ... test.war\_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
Javac 컴파일러의 오류 메시지 출력은 서버 로그 파일에 있습니다. 이 출력은 다음과 같습니다.
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:\WASROOT\temp\ ... test.war\_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
JSP 파일의 오류를 정정하고 파일을 재시도하십시오.
JavaServer 페이지의 사전 컴파일 사용시 컴파일 실패
증상 | 문제점 | 제안된 솔루션 |
---|---|---|
사전 컴파일이 선택되었을 때 JavaServer 페이지는 관리 콘솔을 통한 배치 중에
컴파일에 실패합니다.
|
클래스 경로에서 사용할 수 없는 다른 JAR(Java Archive) 파일에 대한 종속성이 있는 경우 사전 컴파일이 선택되었을 때 JavaServer Pages는 관리 콘솔을 통한 배치 중에 컴파일에 실패합니다. | wsadmin 스크립트를 사용하여 엔터프라이즈 애플리케이션 배치 중에
JSP 파일을 사전 컴파일할 수 있습니다. 그러나 관리 콘솔을 사용하려면 애플리케이션을
패키징하기 전에 모든 JSP 파일을 컴파일하십시오.
|
JSPG0089E: 페이지 지시문 인코딩 Shift_JIS 및 xml prolog 인코딩 UTF-8 간에 불일치 발견
증상 | 문제점 | 제안된 솔루션 |
---|---|---|
다음 오류가 표시됩니다.
|
jsp:directive.page 요소의 pageEncoding 속성이 UTF-8이 아닙니다. | JavaServer 페이지는 페이지 지시문에 지정된 인코딩과 일치하는
prolog를 지정해야 합니다. 예를 들어
추가 정보는 JavaServer 페이지 스펙에서 섹션 JSP.4.1, 페이지 문자 인코딩과 XML(Extensible Markup Language) 스펙의 섹션 4.3.3 및 부록 F.1을 참조하십시오. |
이러한 단계로도 문제점이 전혀 해결되지 않을 경우, 문제점 진단 및 수정: 학습 자원 주제에 있는 링크를 사용하여 문제점을 식별하고 문서화했는지 확인하십시오. 사용자의 문제점과 유사한 문제점이 없거나 제공된 정보로 사용자의 문제점을 해결할 수 없는 경우 IBM 지원에 문의하여 추가 지원을 받으십시오.
IBM 지원에서 제공하는 알려진 문제점과 해결책에 대한 최신 정보는 IBM 지원 페이지를 참조하십시오. IBM 지원은 이 문제점 해결에 필요한 정보 수집 시간을 줄일 수 있는 문서를 제공합니다.