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」ビューを選択し、上部に見える赤い四角マークのボタンをクリックする。これでサーバーが停止する。

赤いxマークが表示される場合

場合によっては、プロジェクトフォルダーや「war」フォルダーに赤いxアイコンが表示され、プロジェクトを実行できず困る人もいるかもしれない。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]を選択する。Macでは[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を使ってプロジェクトをビルドするように変更できれば、エラーのx表示が消える。その後は通常どおりプロジェクトを実行したりデプロイしたりできる。

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]を選択する。Macでは[Eclipse]メニューから環境設定を選択する。

  3. このウィンドウの左側に設定項目が階層的な一覧で表示されているので、その中から「Google」項目にある「App Engine」という項目を探してクリックする。

  4. App Engine画面で「Add」ボタンを押して、ダウンロードしたSDKを追加する。そして追加したSDKを選択した後、「OK」ボタンを押す。

これで再びプロジェクトを実行すると、エラーが発生しないことを確認できるはずだ。