JSP/Servlet | JSP(Java Server Pages) | JSP 실행하기

그럼 프로젝트를 배포하고 동작을 확인해야 하겠지만, 매번 조금 수정할 때마다 배포를 한다면 느리기도 하고 귀찮을 것이다. 그래서 로컬 환경에서 프로젝트의 동작 확인을 하는 방법을 설명한다.

  1. Project Explorer에서 실행하는 프로젝트의 폴더( “MyGaeApp"폴더)를 선택한다.

  2. [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를 사용하고 있기"때문이다. 다음과 같이 설정을 변경한다.

  1. [Window] 메뉴에서 하단의 [Preferences]를 선택한다. (맥에서는 [Eclipse] 메뉴에서 환경 설정을 선택한다.

  2. 화면에 Eclipse의 각종 설정할 창이 나타난다. 이 윈도우의 왼쪽에 설정 항목이 계층적 목록으로 표시되어 있다. 이 중에서 「Java」항목에 있는 “Installed JREs"라는 항목을 찾아 클릭한다.

  3. 설치되어 있는 JRE/JDK가 나열된다 (아마, 보통, 기본적으로 1개뿐). 현재 사용중인 항목은 체크가 ON으로 되어 있다. 이것이 JRE라고 프로젝트의 빌드가 잘되지 않고 오류 표시가 나타날 것이다.

  4. 만약 아직 JDK 설정이 없었다면 작성한다. “Add …“버튼을 클릭한다. 화면에 JDK 추가 대화 상자가 나타난다.

  5. “Installed JDK Types"표시가 나타난다. 이것은 기본적으로 선택되어있는 “Standard VM"을 선택한다.

  6. “JRE Definition"이라는 표시로 이동한다. 여기에서 JDK를 설정한다. 먼저 상단의 “JRE Home:“라는 항목의 오른쪽에 있는 “Directory …“버튼을 누른다. JRE/JDK 폴더를 선택하는 대화 상자가 나타난다. 여기에서 설치되어 있는 JDK 폴더를 선택하고 OK한다. JRE Home에 JDK의 경로가 설정되면 동시에 다른 항목도 자동으로 설정된다.

  7. 그대로 “Finish"버튼을 눌러 대화 상자를 종료한다. 이제 추가 한 JDK가 항목에 표시되게 된다.

  8. 새로 추가한 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 변경 방법에서 대해 설명하겠다.

  1. 콘솔 창에서 설명했듯이 아래 URL(https://developers.google.com/appengine/downloads)에서 최신 SDK를 다운 받아서 적당한 곳에 저장한다.

  2. [Window] 메뉴에서 하단의 [Preferences]를 선택한다. (맥에서는 [Eclipse] 메뉴에서 환경 설정을 선택한다.

  3. 이 윈도우의 왼쪽에 설정 항목이 계층적 목록으로 표시되어 있는데, 이 중에서 「Google」항목에 있는 “App Engine"라는 항목을 찾아 클릭한다.

  4. App Engine 화면에서 “Add” 버튼을 눌려서 다운받은 SDK를 추가한다. 그리고 추가한 SDK를 선택한 후에 “OK” 버튼를 누른다.

이제 다시 프로젝트를 실행하면 에러가 발생하지 않는 것을 확인 할수 있을 것이다.