JSP/Servlet | JSP(Java Server Pages) | JSP 실행하기
그럼 프로젝트를 배포하고 동작을 확인해야 하겠지만, 매번 조금 수정할 때마다 배포를 한다면 느리기도 하고 귀찮을 것이다. 그래서 로컬 환경에서 프로젝트의 동작 확인을 하는 방법을 설명한다.
-
Project Explorer에서 실행하는 프로젝트의 폴더( “MyGaeApp"폴더)를 선택한다.
-
[Run]메뉴의 [Run As …]의 하위 메뉴에서 “Web Application"을 선택한다. 이것으로 내장 Java 서버가 실행되고 프로젝트가 그 곳에서 실행된다.
내장 서버가 시작되면 “http://localhost:8888/hello.jsp” 주소를 방문하여 본다. 만든 hello.jsp가 표시된다. <%= %>
으로 이미 기술해 놓은 현재의 시간 값이 표시되는가? 이는 서버 측에서 <%= java.util.Calendar.getInstance().getTime()%>
의 문장이 실행되어 그 결과(날짜 텍스트)가 표시되는 거다.
이런 식으로 내부 서버는 도메인에 “localhost:8888"으로 지정하여 액세스하면 프로젝트의 Web 응용 프로그램에 액세스 할 수 있다. “war"에 배치된 파일 종류도 다음에 파일 이름을 지정해 액세스할 수 있다.
기동된 서버를 종료하려면 아래쪽에 있는 가로 “Console"뷰를 선택하고 상단에 보이는 붉은 ■ 마크 버튼을 클릭한다. 이제 서버가 중지된다.
■ 빨간 × 마크가 표시된다면?
경우에 따라서는 프로젝트 폴더와 “war"폴더에 빨간 × 아이콘이 표시되어 프로젝트를 수행할 수 없어 곤란한 빠진 사람도 있을지도 모른다. war.xml과 appengine-web.xml을 무언가를 잘못 썼다던가, 프로젝트의 라이브러리를 마음대로 삭제해 버린 것이 아니라면 원인은 아마도 “JDK 대신 JRE를 사용하고 있기” 때문이다. JDK는 Java 프로그램을 빌드하는 것이다. 이에 비해 JRE는 프로그램을 실행하는 것 뿐이다. 프로젝트를 빌드하는데 JRE를 사용하게 되면 빌드할 수 없기 때문에 오류가 발생한다.
화면 하단의 “Markers"라는 뷰를 선택해 본다. 여기에 발생한 오류의 내용이 표시된다. 여기에 “Your project must be configured to use a JDK in order to use JSPs"라고 오류 메시지가 적혀 있으면, 이 “JRE를 사용하고 있기"때문이다. 다음과 같이 설정을 변경한다.
-
[Window] 메뉴에서 하단의 [Preferences]를 선택한다. (맥에서는 [Eclipse] 메뉴에서 환경 설정을 선택한다.
-
화면에 Eclipse의 각종 설정할 창이 나타난다. 이 윈도우의 왼쪽에 설정 항목이 계층적 목록으로 표시되어 있다. 이 중에서 「Java」항목에 있는 “Installed JREs"라는 항목을 찾아 클릭한다.
-
설치되어 있는 JRE/JDK가 나열된다 (아마, 보통, 기본적으로 1개뿐). 현재 사용중인 항목은 체크가 ON으로 되어 있다. 이것이 JRE라고 프로젝트의 빌드가 잘되지 않고 오류 표시가 나타날 것이다.
-
만약 아직 JDK 설정이 없었다면 작성한다. “Add …“버튼을 클릭한다. 화면에 JDK 추가 대화 상자가 나타난다.
-
“Installed JDK Types"표시가 나타난다. 이것은 기본적으로 선택되어있는 “Standard VM"을 선택한다.
-
“JRE Definition"이라는 표시로 이동한다. 여기에서 JDK를 설정한다. 먼저 상단의 “JRE Home:“라는 항목의 오른쪽에 있는 “Directory …“버튼을 누른다. JRE/JDK 폴더를 선택하는 대화 상자가 나타난다. 여기에서 설치되어 있는 JDK 폴더를 선택하고 OK한다. JRE Home에 JDK의 경로가 설정되면 동시에 다른 항목도 자동으로 설정된다.
-
그대로 “Finish"버튼을 눌러 대화 상자를 종료한다. 이제 추가 한 JDK가 항목에 표시되게 된다.
-
새로 추가한 JDK의 체크를 ON으로하여 대화의 “OK"버튼을 눌러 닫는다.
이제 JDK를 사용하여 프로젝트가 빌드하려 고치면, 오류의 × 표시가 사라진다. 그 후는 그대로 정상적으로 프로젝트를 실행하거나 배포할 수 있다.
HTTP ERROR 500 가 발생한다면?
혹은 프로젝트를 수행은 되었으나 화면을 표시를 시도하면 아래와 같이 에러가 발생하고,
...생략...
Caused by:
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files
Stacktrace:
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:349)
...생략...
화면 하단의 “Console” 창에서 최신 SDK를 설치를 권고하는 에러가 발생하는 경우도 있다.
... 생략 ....
********************************************************
There is a new version of the SDK available.
-----------
Latest SDK:
Release: 1.9.58
Timestamp: Sat Oct 07 01:48:02 KST 2017
API versions: [1.0]
-----------
Your SDK:
Release: 1.9.34
Timestamp: Fri Feb 12 04:36:15 KST 2016
API versions: [1.0]
-----------
Please visit https://developers.google.com/appengine/downloads for the latest SDK.
********************************************************
... 생략 ....
이는 JDK와 GAE 사이에 충돌이 나서 발생한 것이다. 이런 경우에는 JDK를 버전을 변경 또는 GAE를 변경하면 된다. JDK를 변경하는 방법은 위에서 설명을 하였고 여기서는 GAE 변경 방법에서 대해 설명하겠다.
-
콘솔 창에서 설명했듯이 아래 URL(https://developers.google.com/appengine/downloads)에서 최신 SDK를 다운 받아서 적당한 곳에 저장한다.
-
[Window] 메뉴에서 하단의 [Preferences]를 선택한다. (맥에서는 [Eclipse] 메뉴에서 환경 설정을 선택한다.
-
이 윈도우의 왼쪽에 설정 항목이 계층적 목록으로 표시되어 있는데, 이 중에서 「Google」항목에 있는 “App Engine"라는 항목을 찾아 클릭한다.
-
App Engine 화면에서 “Add” 버튼을 눌려서 다운받은 SDK를 추가한다. 그리고 추가한 SDK를 선택한 후에 “OK” 버튼를 누른다.
이제 다시 프로젝트를 실행하면 에러가 발생하지 않는 것을 확인 할수 있을 것이다.